對於低分數據來講,經常使用的校訂方式就是給定數據的經緯度查找表來進行校訂。在GDAL中,這種校訂方式叫Geolocation array。經常使用的數據有國外的MODIS數據,國內的如風雲系列(FY)和海洋系列衛星(HY)都是使用這種方式來進行處理。
GDAL庫讀取MODIS數據(HDF格式)的時候,會自動讀取裏面的經緯度查找表,並構造一個叫作GeoLocation的元數據段。以下所示:
只要有這個信息,使用GDAL就能夠來對數據進行校訂,可是對於國內的風雲系列以及海洋系列衛星的數據來講,在數據裏面會有這個信息,可是格式不是按照GDAL能夠識別的格式來進行存儲,因此不能自動來識別這個GeoLocation信息,從而也就不能直接使用GDAL來對其進行校訂處理。
爲了解決這個問題,咱們能夠使用GDAL提供的VRT格式來做爲中介,手動來構造這個Geolocation元數據信息,而後再使用GDAL庫進行校訂處理。VRT的一個例子以下:算法
<VRTDataset rasterXSize="139" rasterYSize="859">
<Metadata domain="GEOLOCATION">
<MDI key="LINE_OFFSET">0</MDI>
<MDI key="LINE_STEP">1</MDI>
<MDI key="PIXEL_OFFSET">0</MDI>
<MDI key="PIXEL_STEP">1</MDI>
<MDI key="SRS">GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4326"]]</MDI>
<MDI key="X_BAND">1</MDI>
<MDI key="X_DATASET">HDF5:"E:\H2A_RM2A20130722000048_0073.h5"://data_fields/Long_of_Observation_Point</MDI>
<MDI key="Y_BAND">1</MDI>
<MDI key="Y_DATASET">HDF5:"E:\H2A_RM2A20130722000048_0073.h5"://data_fields/Lat_of_Observation_Point</MDI>
</Metadata>
<VRTRasterBand dataType="Float32" band="1">
<SimpleSource>
<SourceFilename relativeToVRT="0">HDF5:"E:\H2A_RM2A20130722000048_0073.h5"://data_fields/Res0_sst</SourceFilename>
<SourceBand>1</SourceBand>
</SimpleSource>
</VRTRasterBand>
</VRTDataset>
下面對這個VRT進行簡單的說明,節點Metadata中就是Geolocation信息,一共有九個子節點組成,行偏移量,列偏移量,行步長,列步長,行對應的座標數據集(緯度數據集),列對應的座標數據集(經度數據集),緯度數據集波段號,經度數據集波段號以及投影。具體含義能夠參考我以前的博客。
下面的VRTRasterBand節點用來構造數據信息,能夠構造爲多個波段,具體能夠參考VRT的格式說明。
構造好上面的VRT數據,而後直接調用GDAL庫中的Geolocation校訂算法便可完成對數據的校訂處理。markdown