修改GDAL库支持IRSP6数据
使用GDAL库发现不能打开IRSP6的数据,不过看GDAL提供的文件格式里面却是支持IRSP6的数据的,具体可以参考网页http://www.gdal.org/frmt_fast.html。下面图1是一个IRSP6数据的目录结构,由一个hdr和四个ges数据组成,hdr是FAST格式的主文件,ges就是每个波段的裸数据。
图1 P6数据目录结构
首先使用gdalinfo工具输出看看能不能读取。gdalinfo输出的结果如图2所示,可以看出gdal是不支持这种数据的。
图2 gdalinfo打开查看信息
下面是hdr文件中的内容,
PRODUCT ID =ID201104-01 LOCATION =134/03000F ACQUISITION DATE =20090101
SATELLITE =IRS P6 SENSOR =AWIFS SENSOR MODE =PLD LOOK ANGLE = 0.00LOCATION = ACQUISITION DATE =
SATELLITE = SENSOR = SENSOR MODE = LOOK ANGLE = LOCATION = ACQUISITION DATE =
SATELLITE = SENSOR = SENSOR MODE = LOOK ANGLE = LOCATION = ACQUISITION DATE =
SATELLITE = SENSOR = SENSOR MODE = LOOK ANGLE =
PRODUCT TYPE =MAP ORIENTED PRODUCT SIZE =FULL SCENE
TYPE OF PROCESSING =SYSTEMATIC RESAMPLING =CC
VOLUME #/# IN SET =01/01 PIXELS PER LINE =18284 LINES PER BAND =17248/17248
START LINE # = 1 BLOCKING FACTOR = 1 RECORD LENGTH =36568 PIXEL SIZE = 56.00
OUTPUT BITS PER PIXEL =10 ACQUIRED BITS PER PIXEL =10
BANDS PRESENT =2345 PRODUCT CODE =STLC00GBD
VERSION NO =IRSP6DPSV1R2 ACQUISITION TIME =02:52:16:357
GENERATING COUNTRY =CHINA GENERATING AGENCY =RSGS
GENERATING FACILITY =DPFP6 PRODUCT ENDIAN =LITTLE REV CBIASES AND GAINS IN THE BAND ORDER AS ON THIS TAPE 0.000000000000000 52.340000000000003 0.000000000000000 40.750000000000000 0.000000000000000 28.425000000000001 0.000000000000000 4.645000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 SENSOR GAIN STATE = 8 9 8 9
SENSOR STATE =GOOD GEOMETRIC DATA MAP PROJECTION =LCC ELLIPSOID =WGS_84 DATUM =WGS_84
USGS PROJECTION PARAMETERS = 6378137.000000000000000 6356752.314199999906123 55.209495199333482 51.035107167553996 129.000000000000000 10.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000
UL = 1174202.5250E 571139.1862N -681580.807 5708788.219
UR = 1344237.7839E 573316.7699N 342323.193 5708788.219
LR = 1333947.1849E 485402.4658N 342323.193 4742900.219
LL = 1194514.8374E 483619.3269N -681580.807 4742900.219
CENTER = 1262709.6744E 531850.3922N -169628.807 5225844.219 9142 8624
OFFSET = 128 ORIENTATION ANGLE = 0.00
SUN ELEVATION ANGLE =13.1 SUN AZIMUTH ANGLE =169.7 ALTITUDE =829002.00000
HEADING ANGLE = 207.006210
仔细查看帮助文档,发现对于IRS数据,由于hdr文件中没有记录波段数据的文件名称,所以只能猜测可能的波段数据名称,GDAL目前猜的规则是:
<header>.<ext>
<header>.1.<ext>
<header>.2.<ext>
...or<header>.<ext>
band1.<ext>
band2.<ext>
...or<header>.<ext>
band1.dat
band2.dat
...or<header>.<ext>
imagery1.<ext>
imagery2.<ext>
...or<header>.<ext>
imagery1.dat
imagery2.dat
...
从上面可以看出,猜测的几种数据就是没有<header>_1.ges这种类型,于是就ges修改对应的源码,源码位于GDAL_HOME\frmts\raw/fastdataset.cpp。主要修改下面几个方面:
1、Open函数中,数据的生产单位原来是写死的“GENERATING AGENCY =EUROMAP”,而这个数据却是"GENERATING AGENCY =EUROMAP"。所以将原来的
if (strstr(pszHeader, "GENERATING AGENCY =EUROMAP")!= NULL)
修改为:
if ((strstr(pszHeader, "GENERATING AGENCY =EUROMAP")!= NULL) ||(strstr(pszHeader, "GENERATING AGENCY =RSGS")!= NULL))
2、Open函数中最下面,原来只判断了WGS84,而这个数据里面是WGS_84,所以再加上这个判断。修改后的代码如下:
if ( EQUAL( pszTemp, "WGS84" ) || EQUAL( pszTemp, "WGS_84" ) )
3、FOpenChannel函数中,加上我们这个数据的波段数据类型,即<header>_1.ges。在原来的default后面加上一个,如下所示:
default:pszChannelFilename = CPLFormFilename( pszDirname,CPLSPrintf( "%s.%d", pszPrefix, iFASTBand ), pszSuffix );if ( OpenChannel( pszChannelFilename, iBand ) )break;pszChannelFilename = CPLFormFilename( pszDirname,CPLSPrintf( "%s_%d.ges", pszPrefix, iFASTBand ), NULL );if ( OpenChannel( pszChannelFilename, iBand ) )break;
保存上面的内容,然后重新编译,使用gdalinfo输出的信息为:
图3 gdalinfo工具查看输出的信息
修改GDAL库支持IRSP6数据相关推荐
- 修改GDAL库支持RPC像方改正模型
最近在做基于RPC的像方改正模型,方便对数据进行测试,修改了GDAL库中的RPC纠正模型,使之可以支持RPC像方改正参数. 下面是RPC模型的公式,rn,cn为归一化之后的图像行列号坐标,PLH为归一 ...
- 使用Geolocation校正GDAL不支持的数据
对于低分数据来说,常用的校正方式就是给定数据的经纬度查找表来进行校正.在GDAL中,这种校正方式叫Geolocation array.常用的数据有国外的MODIS数据,国内的如风云系列(FY)和海洋系 ...
- 使GDAL库支持中文路径或中文文件名的处理方法
之前生成的gdal 2.1.1动态库,在通过命令行执行时,遇到有中文路径或中文图像名时,GDALOpen函数不能正确的被调用,如下图: 解决方法: 1. 在所有使用GDALAllRegist ...
- 编译好的GDAL库,支持ECW格式,支持proj,支持geos
这几天因为工作需要,把GDAL重新编译了一下,现支持ECW格式,即可以用GDALOPEN读取JPEG2000格式的影像数据;编译时也添加了对geos和proj的支持. 内含3个文件夹,分别是gdal, ...
- GDAL读取S-57海图数据中文属性值乱码问题解决(续)
上篇博文中的代码使用了函数wcstombs来进行处理,今天发现GDAL库里面提供了宽字节转单字节的函数,名字叫CPLRecodeFromWChar(这个函数需要libiconv库的支持,也就是在编译G ...
- GDAL读取S-57海图数据中文属性值乱码问题解决
使用GDAL读取S-57海图数据时,对于属性表中的中文属性值读出来是乱码.如图1所示. 图1 S57海图数据中文乱码字段 通过调试代码发现,S-57文件中的中文是按照宽字节存储在文件中,而GDAL在读 ...
- GDAL库——读取图像并提取基本信息
GDAL库是一个跨平台的栅格地理数据格式库,包括读取.写入.转换.处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持).它使用了一个单一的抽象数据模型就支持了大多数的栅格数据.这里有GDAL ...
- GDAL库中WFS服务中含有中文不能获取数据的问题
GDAL库中目前提供了对WFS服务发布的数据进行获取,目前发现对于中文的服务名称或者图层名为中文,GDAL不能正确识别.通过调试发现,其原因有下面两点: 1.输入的URL路径没有使用UTF8编码而从网 ...
- GDAL库读取Envisat ASAR数据
GDAL库本身就可以读取Envisat的图像数据,具体链接为:http://www.gdal.org/frmt_various.html#Envisat. 但是对于ASAR传感器的数据来说,GDAL在 ...
最新文章
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- 交叉编译arm-none-linux-gnueabi-gcc: No such file or directory
- 微服务配置中心是干啥的_微服务入门到精通-分布式配置中心(续)
- C++与QML逻辑分离
- MFC之AfxbeginThread 线程 创建、挂起、释放、结束、退出
- 『数据库』朴实无华的数据库绪论
- 跳一跳python开挂_微信跳一跳物理外挂—教​你用 Python 来玩微信跳一跳
- 杭电1231最大连续子序列
- 【Flutter】如何新建项目,运行你的第一个 flutter 工程项目
- read()/write()的生命旅程之三——第三章:write()
- linux怎么点亮硬盘灯_一种基于Linux系统下测试Expander背板硬盘指示灯的方法及系统与流程...
- mysql查询记录总数_MySQL记录总条数实现查询优化
- Ubuntu系统未发现vim命令
- BRVAH(BaseRecyclerViewAdapterHelper)详解
- intellij idea 2017破解
- dell 恢复介质_使用 Dell 恢复介质重新安装操作系统
- ACM第三次比赛题目及标准程序(贪心)
- TestCenter Layer4-7分析
- 算法设计与分析:分治法输出数字旋转方阵
- 365句百姓真理——男人好色,女人好情
热门文章
- constrain用法java_Java中的@UniqueConstraint注释
- qq语音按住ctrl就静音怎么解决_excel图形处理技巧:怎么制作出地摊经济的街景...
- 洛谷——P1652 圆
- 利用函数求数组中的最大值
- appendChild+insertBefore:创建和添加节点
- 计算机工程学院运动会方阵口号,运动会方阵口号(精选多篇)
- java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...
- JavaSE面向对象-笔记
- Anaconda 国内镜像配置
- 最大公约数及最小公倍数计算