GDAL学习笔记——GDAL的数据模型


数据集(dataset)

一个数据集(可用GDALDataset表示)是栅格波段以及栅格波段所包含的信息的集合。栅格尺寸(像素和线条)的概念针对所有的波段。同样也负责所有波段的地理空间参考系的转换和坐标系的定义。数据集本身也会有相关的元数据信息,以字符串的形式存储(名/值)。

坐标系统

数据集的坐标系统用OpenGIS的WKT文本表示,包含以下内容:

  • 坐标系统的名称
  • 地理坐标系名称
  • 基准面标识
  • 椭球体名称、长半轴、反扁率
  • 本初子午线名称(格林尼治子午线)以及与格林尼治子午线之间的偏移量
  • 投影方法(比如横轴墨卡托投影)
  • 投影方法的参数列表(如中央子午线)
  • 单位名称和该单位转换到米或弧度的转换参数
  • 坐标轴的名字和次序
  • 包含上述信息 的官方编号,比如EPSG。

GDALDataset::GetProjectionRef()函数返回的坐标系是描述含有仿射变换的的地理坐标系。GDALDataset::GetGeoTransform()函数返回地理坐标系的仿射变换。GDALDataset::GetGCPProjection()函数返回的坐标系描述的是地面控制点的地理参考坐标系。 GDALDataset::GetGCPs()函数返回地面控制点。

仿射地理坐标转换(Affine GeoTransform)

GDAL有两种方法描述栅格点(像素/行坐标表示)和地理参考坐标系之间的关系。第一个,也是常用的方法是仿射变换;另一个是地面控制点(GCPS)
仿射变换有六个参数,可以由GDALDataset::GetGeoTransform()函数获取。利用下面的公式描述像素点到地理空间的映射。

    Xgeo = GT(0) + Xpixel*GT(1) + Yline*GT(2)
    Ygeo = GT(3) + Xpixel*GT(4) + Yline*GT(5)

假设影像中向上是北方向,则 GT(2)和GT(4) 系数值为0; GT(1)是像素的宽; GT(5)是像素的高; (GT(0),GT(3))坐标点表示栅格中左上角像素的左上角的点坐标。

地面控制点(GCPS)

数据集中有一组控制点实现栅格与地理坐标中的关联。所有的GCPS有相同的地理参考坐标系,可以通过GDALDataset::GetGCPProjection()函数得到。每个控制点(由 GDAL_GCP类表示)包含以下内容:

typedef struct
{
    char        *pszId;
    char        *pszInfo;
    double      dfGCPPixel;
    double      dfGCPLine;
    double      dfGCPX;
    double      dfGCPY;
    double      dfGCPZ;
} GDAL_GCP;

(Pixel,Line)坐标表示GCP在栅格影像中的位置;(X,Y,Z)表示GCP在地理空间中的位置。

元数据(Metadata)

GDAL中的元数据是辅助的数据,用于特定的数据保存一系列(name/value)对。name是由一定的规范;value可以是任意长度,包含任意值除了NULL(ASCII zero)。

子数据集域(Subdatasets Domain)

子数据集域包含一系列子数据集。一般是是用来提供指针指向存储在单多图像文件中的一些列图像。比如,含有两个图像的NITF可能用下面的子数据集列表:

  SUBDATASET_1_NAME=NITF_IM:0:multi_1b.ntf
  SUBDATASET_1_DESC=Image 1 of multi_1b.ntf
  SUBDATASET_2_NAME=NITF_IM:1:multi_1b.ntf
  SUBDATASET_2_DESC=Image 2 of multi_1b.ntf

_NAME的值可以传递给GDALOpen()函数用于打开文件。_DESC值目的用于过滤用户需要的文件。

目前,子数据集支持的驱动有ADRG、ECRGTOC、GEORASTER、GTiff、HDF4、HDF5、netCDF、NITF、NTv2、OGDI、PDF、PostGISRaster、Rasterlite、RPFTOC、RS2、WCS和WMS。

图像结构域(Image Structure Domain)

元数据在默认的域中目的是与图像相关的,与图像在磁盘中存储方式是不特别相关的。也就是说,当数据集复制到新的格式,是比较方便的。一些感兴趣的信息是绑定在一种特定的文件格式和存储机理中,为了防止在复制数据集的时候,也复制这些感兴趣的信息,则将之放在一个特定的域中,该域称为图像结构域。这种域通常不应该复制到新的格式中。

  • COMPRESSION:数据集或波段的压缩类型
  • NBITS:波段的位数或者数据集的波段数
  • INTERLEAVE:是应用于数据集中, 只能是PIXEL、LINE或BAND中的值,是作为一种数据访问的提示。
  • PIXELTYPE:这个参数可能出现在GDT_Byte波段(或相应的数据集)

RPC域

RPC元数据域保存的元数据是描述图像的有理多项式模型。这个集合模型可以用来像素与地理空间坐标之间的转换。定义模型的参数有:

  • ERR_BIAS: Error – Bias. The RMS bias error in meters per horizontal
    axis of all points in the image (-1.0 if unknown)
  • ERR_RAND: Error – Random. RMS random error in meters per horizontal
    axis of each point in the image (-1.0 if unknown)
  • LINE_OFF: Line Offset
  • SAMP_OFF: Sample Offset
  • LAT_OFF: Geodetic Latitude Offset
  • LONG_OFF: Geodetic Longitude Offset
  • HEIGHT_OFF: Geodetic Height Offset
  • LINE_SCALE: Line Scale
  • SAMP_SCALE: Sample Scale
  • LAT_SCALE: Geodetic Latitude Scale
  • LONG_SCALE: Geodetic Longitude Scale
  • HEIGHT_SCALE: Geodetic Height Scale
  • LINE_NUM_COEFF (1-20): Line Numerator Coefficients. Twenty
    coefficients for the polynomial in the Numerator of the rn equation.
    (space separated)
  • LINE_DEN_COEFF (1-20): Line Denominator Coefficients. Twenty
    coefficients for the polynomial in the Denominator of the rn
    equation. (space separated)
  • SAMP_NUM_COEFF (1-20): Sample Numerator Coefficients. Twenty
    coefficients for the polynomial in the Numerator of the cn equation.
    (space separated)
  • SAMP_DEN_COEFF (1-20): Sample Denominator Coefficients. Twenty
    coefficients for the polynomial in the Denominator of the cn
    equation. (space separated)

影像域(遥感)(IMAGERY Domain (remote sensing))

影像域用于卫星或航天影像。它依赖于附在影像文件中的特殊元数据文件。这些文件位于影像文件相同目录,元数据解析器进行解析,如果这些文件可以被元数据解析器进行处理,可以得到下面几项值:

  • SATELLITEID:卫星或扫描器的名称
  • CLOUDCOVER:云覆盖。该值位于0-100之间,或者999表示不可用。
  • ACQUISITIONDATETIME:图像采集的时间(UTC)

XML域(XML Domains)

任何由“xml:”修饰的域名并不是常规的名称/值(name/value)对元数据。它仅仅是单独的XML文档存储在一个大的字符串中。

栅格波段(Raster Band)

GDAL中用GDALRasterBand类表示栅格波段,表示单波段/单通道/单图层,它并不需要表示整个图像。例如,一个24位的RGB图像通常被表示为红、绿、蓝3个波段的数据集。
一个栅格波段有以下属性:

  • 宽和高(由像素或者行表示)
  • 数据类型(GDALDataType),Byte、UInt16、 Int16、 UInt32、 Int32、 Float32、
    Float64和复杂类型 CInt16、CInt32、CFloat32、CFloat64中的一种。
  • 块大小。这是首选(高效)访问的块大小。对于瓦片图像来说就是一个瓦片的大小,对于行扫描图像来说就是一个扫描线的大小。
  • 名称/值(name/value)对的元数据列表,与数据集中格式一样,但是信息是只指向这个波段的信息。
  • 描述性字符串(可选)
  • 无数据的像元值(可选)
  • 图像掩膜(可选)
  • 目录名称(专题图中的类名) (可选)
  • 最大值和最小值(可选)
  • 将图像像素值转换为有意义的值时所需要的偏移和比例,例如将图像高度转换为米。(可选)
  • 单位名称,例如,表示高程数据的单位(可选)
  • 波段的色彩描述,值为下面的一种:
    • GCI_Undefined:默认值
    • GCI_GrayIndex:独立的灰度图像
    • GCI_PaletteIndex::这个栅格图像表现为一个颜色表的索引颜色
    • GCI_RedBand:RGB或RGBA图像的红色波段
    • GCI_GreenBand:RGB或RGBA图像的绿色波段
    • GCI_BlueBand:RGB或RGBA图像的蓝色波段
    • GCI_AlphaBand:RGB或RGBA图像的Alpha波段
    • GCI_HueBand:HLS图像的色调波段
    • GCI_SaturationBand:HLS图像的饱和度波段
    • GCI_LightnessBand: HLS图像的明度波段
    • GCI_CyanBand:CMY或CMYK图像的青色波段
    • GCI_CyanBand:CMY或CMYK图像的青色波段
    • GCI_MagentaBand:CMY或CMYK图像的品红波段
    • GCI_YellowBand:CMY或CMYK图像的黄色波段
    • GCI_BlackBand:CMY或CMYK图像的黑色波段
  • 颜色表
  • 较低分辨率的概览图(影像金字塔,如果有的话)

颜色表(Color Table)

颜色表包含0个或更多的颜色条目描述。下面是C语言的结构形式:

typedef struct
{
    /- gray, red, cyan or hue -/
    short      c1;
    /- green, magenta, or lightness -/
    short      c2;
    /- blue, yellow, or saturation -/
    short      c3;
    /- alpha or black band -/
    short      c4;
} GDALColorEntry;

颜色表的描述值(GDALPalettInterp):

  • GPI_Gray:把c1作为灰度值
  • GPI_RGB:把c1作为红波段,c2为绿波段,c3为蓝波段,c4为alpha波段
  • GPI_CMYK:c1作为青色波段,c2作为品红波段,c3作为黄色波段,c4作为黑色波段
  • GPI_HLS:c1作为色调波段,c2作为亮度波段,c3作为饱和度波段

转载自:https://blog.csdn.net/u010670734/article/details/53153645

You may also like...