使用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.00
LOCATION = 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数据的更多相关文章

  1. 修改GDAL库支持RPC像方改正模型

    最近在做基于RPC的像方改正模型,方便对数据进行测试,修改了GDAL库中的RPC纠正模型,使之可以支持RPC像方改正参数. 下面是RPC模型的公式,rn,cn为归一化之后的图像行列号坐标,PLH为归一 ...

  2. 使用Geolocation校正GDAL不支持的数据

    对于低分数据来说,常用的校正方式就是给定数据的经纬度查找表来进行校正.在GDAL中,这种校正方式叫Geolocation array.常用的数据有国外的MODIS数据,国内的如风云系列(FY)和海洋系 ...

  3. 改动GDAL库支持RPC像方改正模型

    近期在做基于RPC的像方改正模型.方便对数据进行測试,改动了GDAL库中的RPC纠正模型,使之能够支持RPC像方改正參数. 以下是RPC模型的公式,rn,cn为归一化之后的图像行列号坐标,PLH为归一 ...

  4. 使GDAL库支持中文路径或中文文件名的处理方法

    之前生成的gdal 2.1.1动态库,在通过命令行执行时,遇到有中文路径或中文图像名时,GDALOpen函数不能正确的被调用,如下图: 解决方法: 1.      在所有使用GDALAllRegist ...

  5. 扩展GDAL,支持CNSDTF格式(一)

    扩展GDAL,支持CNSDTF格式(一) 一.        简介 本文主要根据<中华人民共和国国家标准GB/T17798-2007--地理空间数据交换格式(Geospatialdata tra ...

  6. GDAL库——读取图像并提取基本信息

    GDAL库是一个跨平台的栅格地理数据格式库,包括读取.写入.转换.处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持).它使用了一个单一的抽象数据模型就支持了大多数的栅格数据.这里有GDAL ...

  7. GDAL库中WFS服务中含有中文不能获取数据的问题

    GDAL库中目前提供了对WFS服务发布的数据进行获取,目前发现对于中文的服务名称或者图层名为中文,GDAL不能正确识别.通过调试发现,其原因有下面两点: 1.输入的URL路径没有使用UTF8编码而从网 ...

  8. GDAL库扩展Landsat系列MTL文件格式支持

    Landsat系列卫星提供的数据,一般都是每个波段一个tif文件,然后外加一个MTL.txt的元数据文件,使用gdal可以直接打开每个波段的tif文件,但是有时候想在打开tif数据的同时能够自动读取M ...

  9. 浅析GDAL库C#版本支持中文路径问题(续)

    上篇博客中主要说了GDAL库C#版本中存在的问题,其表现形式主要是:"文件名中的汉字个数是偶数,完全没有影响,读取和创建都正常,如果文件名中的汉字个数是奇数,读取和创建都会报错." ...

随机推荐

  1. Spring利用反射调用接口

    首先在项目中使用java反射调用 //根据实例及参数名获得方法A Method method = event.getObj().getClass() .getMethod(event.getMetho ...

  2. Intellij Error:Cannot build Artifact 'XXX:war exploded' because it is included into a circular dependency

    外网的流程是这样的. 1: 2: 3: 4: 基本按这个来就好了 如果到了build artfact哪里按钮是灰色 就要手动建了 https://jingyan.baidu.com/album/0a5 ...

  3. CAP原理和BASE思想和ACID模型

    问题的解读 对于上面三个例子,相信大家一定看出来了,我们的终端用户在使用不同的计算机产品时对于数据一致性的需求是不一样的: 1.有些系统,既要快速地响应用户,同时还要保证系统的数据对于任意客户端都是真 ...

  4. Python小代码_10_判断是否为素数

    import math n = int(input('Input an integer:')) m = int(math.sqrt(n) + 1) for i in range(2, m): if n ...

  5. 【转】动态规划DP

    [数据结构与算法] DP 动态规划 介绍 原创 2017年02月13日 00:42:51 最近在看算法导论. DP全称是dynamic programming,这里programming不是编程,是一 ...

  6. Python中迭代输出(index,value)的几种方法

    需求如下:迭代输出序列的索引(index)和索引值(value). 1.创建测试列表: >>> lst = [1,2,3,4,5] 2.实现方法如下: #方法1:range()+le ...

  7. Node.js DNS 模块

    Node.js DNS 模块用于解析域名.引入 DNS 模块语法格式如下: var dns = require("dns") 方法 序号 方法 & 描述 1 dns.loo ...

  8. RX系列三 | RxJava | create | from | interval | just | range | filter

    RX系列三 | RxJava | create | from | interval | just | range | filter 我们在第一篇里有说过一些基本的关系,现在我们需要用到一些依赖,这里记 ...

  9. 关于Java,那些我心存疑惑的事(不断更新中...)

    本文主要列出一些Java常用到确又让大家不怎么注意的问题. 将会不断更新,欢迎关注-- 如有觉得不合理之处,欢迎评论交流,没有火花怎么印象深刻? (1)Java到底是值传递?还是引用传递? 揪出这个问 ...

  10. pdflush进程详解

    一.简介     由于页高速缓存的缓存作用,写操作实际上会被延迟.当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据.在内存中累积起来的脏页最终必须被写回磁盘.在以下两种情况发生时, ...