使用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校订算法便可完成对数据的校订处理。markdown

相关文章
相关标签/搜索