zoukankan      html  css  js  c++  java
  • 使用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校正算法即可完成对数据的校正处理。

  • 相关阅读:
    SQL Server 触发器
    [转]SQL Server 存储过程
    C#-DataView及其用法
    IEnumerable和IEnumerator 详解 And迭代器
    C#多线程学习(六) 互斥对象
    GDI简单的图片处理
    C#委托的介绍(delegate、Action、Func、predicate)
    接口的理解与使用《转》
    Mysql drop、delete和truncate的区别
    如何查看笔记本CPU是几核的?
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6313907.html
Copyright © 2011-2022 走看看