使用Geolocation校正GDAL不支持的數據

對於低分數據來說,常用的校正方式就是給定數據的經緯度查找表來進行校正。在GDAL中,這種校正方式叫Geolocation array。常用的數據有國外的MODIS數據,國內的如風雲系列(FY)和海洋系列衛星(HY)都是使用這種方式來進行處理。
GDAL庫讀取MODIS數據(HDF格式)的時候,會自動讀取裏面的經緯度查找表,並構造一個叫做GeoLocation的元數據段。如下所示:
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校正算法即可完成對數據的校正處理。

發佈了154 篇原創文章 · 獲贊 96 · 訪問量 125萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章