• 修改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.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_HOMEfrmts aw/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工具查看输出的信息

  • 相关阅读:
    2019年6月4号总结
    2019年5月21号总结
    2019年5月8号总结
    2019年5月6号总结
    2019年5月5号总结
    2019年4月18号总结
    java错误笔记之判断字符知否为空出错
    错误笔记:静态方法不能实例化,直接用类名.方法名调用
    Thymeleaf中"th:each""th:if"的用法解析
    @ResponseBody 表示返回的是josn
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6313918.html
Copyright © 2020-2023  润新知