使用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工具檢視輸出的資訊