GDAL数据集官方说明
目录
我只是将GDAL官方对Dataset数据集的说明翻译了一下,翻译的不妥的地方还请大家多多包涵!
本文档描述了GDAL的数据模型,也就是GDAL数据集能够包含的信息类型和信息的语义。
Dataset 数据集
数据集(由GDALDataset类表示)是一个栅格波段数据和所有相关信息的集合。特别的,数据集有一个应用于所有波段的栅格大小的概念(由像素或者行表示)。数据集也负责所有波段数据的地理投影转换和坐标定义的任务。数据集本身也能够有相关的元数据信息,由“name/value”形式的字符对来表示。
注意:GDAL数据集和栅格波段数据模型是建立在OpenGIS格网数据模型之上的,但这种关系并不十分紧密。
Coordinate System 坐标系统
Dataset的坐标系统是由OpenGIS知名的文本字符串来表示的。它包含:
l 整体坐标系名称
l 地理坐标系名称
l 基准标识
l 椭球体名称,长半轴及扁率
l 本初子午线名称和从格林威治偏移
l 投影类型(例如:横轴墨卡托投影)
l 投影参数列表(例如:中央子午线)
l 单位,以及转换为米或弧度转换参数
l 坐标轴的名称和顺序
l 预定义坐标系统时上述大多数术语所需要的官方代码,例如EPSG
更多关于OpenGIS WKT坐标系统的定义信息和操作方法,参见OSR教程和OGRSpatialReference类文档。
由GDALDataset::GetProjectionRef()返回的坐标系统描述了由GDALDataset::GetGeoTransform()返回的仿射坐标转换的地理坐标信息。由GDALDataset::GetGCPProjection()返回的坐标系统描述的是GDALDataset::GetGCPs()返回的控制点信息。注意:返回的坐标系统字符串若为“”表示地理参考坐标信息为空。
仿射地理坐标转换
GDAL数据集有两种方式描述栅格(由像素/行表示)位置信息和地理参考坐标信息。第一种也是最常用的一种是仿射变换(另一种是控制点变换)。
仿射转换由6个转换系数组成,它们通过将图像的像素/行坐标转换到地理参考空间的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))是图像左上角像素位置。注意:上述的像素/行坐标是从左上角像素位置(0.0,0.0)到图像右下角像素位置,图像宽和高是由像素表示的。因此图像中央位置的像素/行位置应该为(0.5,0.5)。
GCP 控制点
一个数据集可以有一系列的控制点,它们表示栅格坐标向地理参考坐标的一个或多个变换关系。所有的控制点共用一个地理参考坐标系统(由GDALDataset::GetGCPProjection()返回)。每个控制点(表示为GDAL GCP类)包含如下信息:
typedef struct
{
char *pszId;
char *pszInfo;
double dfGCPPixel;
double dfGCPLine;
double dfGCPX;
double dfGCPY;
double dfGCPZ;
} GDAL_GCP;
pszId字符应该是数据集控制点集中每个控制点唯一的标识(经常是,但并不总是连续的)。pszInfo通常为空字符串,但能够包含任何用户定义的与控制点相关的信息文本,同时也可以包含控制点中的机器可解析信息状态,但这里并未包含。
(像素,行)坐标表示控制点在栅格图像中的位置,(X,Y,Z)坐标表示控制点在地理空间中的位置,Z值通常为0。GDAL数据模型并不指定从控制点中提取的转换方法,这是应用程序应该做的。1到5阶多项式是常用的方法。通常一个数据集会包含仿射变换信息或者控制点信息,或者都不包含。两者都包含并不常见,这样就不知道使用哪个。
元数据
GDAL元数据是辅助格式,由名称/值(name/value)的形式保存的应用程序特殊文字数据。名称(name)需要严格的标记(无空格和生僻的字符),值(value)可以是任意长度、包含除了字符串
元数据处理系统并不适合处理大体积的元数据。处理数据集中大于100K的元数据通常会引发奇怪的问题。
一些格式支持通用(用户定义)的元数据,然而另外一些格式驱动器会匹配特殊的格式字段到元数据名称上。例如TIFF格式驱动器返回一些信息标签作为元数据,包括日期/时间字段返回格式为:
TIFFTAG_DATETIME=1999:05:11 11:29:56
元数据被分割成名称的组合,叫做域,默认域没有名称(NULL或者“”)。一些特殊的域为了特殊的目的存在。注意:目前没有任何方法可以列举出一个对象的所有可用的域,但是应用程序能够“测试”任何它们知道如何解析的域。
下面的元数据元素包含了默认域中良好定义的语义信息:
l AREA_OR_POINT::可能是“Area”(默认)或者是“Point”。表示一个像素值是表示整个像素区域还是用只表在像素区域中央的点值。这并不影响保留了面向区域的地理参考的解译。
l NODATA VALUES:值为一个对应于数据集中波段数目的空间分隔的像素值表示,能够被用来正确的识别数据集中没有值的像素。利用这种表示空值的方式使得一个像素在所有波段中当且仅当所有波段的该像素值都满足NODATA_VALUES元祖。这个元数据并不被目前的GDAL驱动器,算法和组织所广泛推荐。
l MATRIX_REPRESENTATION:这个值用于极化雷达数据,包含了该数据提供的矩阵表示。下面的是合法的值:
SCATTERING
SYMMETRIZED_SCATTERING
COVARIANCE
SYMMETRIZED_COVARIANCE
COHERENCY
SYMMETRIZED_COHERENCY
KENNAGH
SYMMETRIZED_KENNAGH
POLARIMETRIC_INTERP:这个元数据元素是为了极化雷达数据的栅格波段而定义的,表示指定矩阵数据所代表的该波段的入口,例如,这个元素的合法值有HH、HV、VH、VV。当数据集是一个协方差矩阵时,这个元数据元素就会是Covariance_11, Covariance_22, Covariance_33, Covariance_12,Covariance_13, Covariance_23中的一个(因为矩阵本身就是一个厄米特矩阵,这是描述矩阵所需的全部数据)。
SUBDATASETS Domain 子数据集域
这个子数据集域包含了一个子数据集的列表。通常用于提供指向一个多图像文件中图像列表的指针。例如,一个包含两幅图像的NITF文件可能具有下面的子数据集列表
SUBDATASET_1_NAME=NITF_IM:0:multi_1b.ntf
SUBDATASET_1_DESC=Image1 of multi_1b.ntf
SUBDATASET_2_NAME=NITF_IM:1:multi_1b.ntf
SUBDATASET_2_DESC=Image2 of multi_1b.ntf
_NAME为字符串,能够传入GDALOpen()函数来接触到文件。_DESC是一个对用户友好的字符串,能够在选择窗口中对用户显示。支持子数据集的驱动器建议使用DMD子数据集的功能。这个信息显示为\-\-格式和\-\-格式传入命令行的实用程序。
目前,支持子数据集的驱动器有:ADRG, ECRGTOC,GEORASTER, GTiff, HDF4, HDF5, netCDF, NITF, NTv2, OGDI, PDF, PostGISRaster,Rasterlite, RPFTOC, RS2, WCS, and WMS。
IMAGE_STRUCTURE图像结构域
元数据的默认域目的就是连接到图像,不是特别为了连接到图像在硬盘的存储方式。也就是说,当数据集被拷贝到新的格式时,它适合同数据集一起拷贝存储。一些感兴趣的信息被紧密的连接到指定的数据格式和存储方式上,为了防止这些信息被同时拷贝到新的格式,定义了一个特殊的域叫做IMAGE_STRUCTURE,表明不能被拷贝到新的格式。
目前下面的元素被 RFC 14定义,表示IMAGE_STRUCTURE域中特殊的语义。
l COMPRESSION:
l NBITS:
l INTERLEAVE:
l PIXELTYPE:
RPC域
RPC元数据域包含了描述图像有理多项式系数的地理模型信息,如果有的话。这个地理模型能够被用于在像素/行和地理参考位置之间转换。这个元素定义的模型为:
ERR_BIAS: Error – Bias. The RMS bias error in meters per horizontalaxis of all points in the image (-1.0 if unknown)
ERR_RAND: Error – Random. RMS random error in meters per horizontalaxis 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. Twentycoefficients for the polynomial in the Numerator of the rn equation. (spaceseparated)
LINE_DEN_COEFF (1-20): Line Denominator Coefficients. Twentycoefficients for the polynomial in the Denominator of the rn equation. (spaceseparated)
SAMP_NUM_COEFF (1-20): Sample Numerator Coefficients. Twentycoefficients for the polynomial in the Numerator of the cn equation. (spaceseparated)
SAMP_DEN_COEFF (1-20): Sample Denominator Coefficients. Twentycoefficients for the polynomial in the Denominator of the cn equation. (spaceseparated)
这些字段直接来自于GeoTIFF RPC文件,然后被紧密的封装在NITF RPC00B定义模型中。
xml 域
任何由“xml:”修饰的域名并不是常规的名称/值(name/value)对元数据。它仅仅是单独的XML文档存储在一个大的字符串中。
Raster Band栅格波段
栅格波段在GDAL中通过GDALRasterBand类表示,代表了一个单独的栅格数据波段/通道/图层,它并不需要表示整个图像。例如,一个24位的RGB图像通常被表示为红、绿、蓝3个波段的数据集。
一个栅格波段含有如下属性:
l 宽和高(由像素或者行表示),如果是全分辨率的图像,这里的定义与数据集中的定义一样。
l 数据类型(GDALDataType),Byte、UInt16、 Int16、 UInt32、 Int32、 Float32、 Float64和复杂类型 CInt16、CInt32、CFloat32、CFloat64中的一种。
l 块大小。这是首选(高效)访问的块大小。对于瓦片图像来说就是一个瓦片的大小,对于行扫描图像来说就是一个扫描线的大小。
l 名称/值(name/value)对的元数据列表,与数据集中格式一样,但是信息是只指向这个波段的信息。
l 描述性字符串(可选)。
l 无数据的像元值(可选)。
l 图像掩膜(可选)。
l 目录名称(专题图中的类名) (可选)。
l 最大值和最小值(可选)。
l 将图像像素值转换为有意义的值时所需要的偏移和比例,例如将图像高度转换为米。(可选)。
l 单位名称,例如,表示高程数据的单位(可选)。
l 波段的色彩描述,值为下面的一种:
○ 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_MagentaBand:CMY或CMYK图像的品红波段
○ GCI_YellowBand:CMY或CMYK图像的黄色波段
○ GCI_BlackBand:CMY或CMYK图像的黑色波段
l 颜色表
l 较低分辨率的概览图(影像金字塔,如果有的话)
颜色表
颜色表由0或者更多的颜色描述,如下:
typedef struct
{
/- gray, red, cyan or hue-/
short c1;
/- green, magenta, orlightness -/
short c2;
/- blue, yellow, orsaturation -/
short c3;
/- alpha or blackband -/
short c4;
颜色表也有一个描述值(GDALPalettInterp),描述下述值中的一组,表明c1/c2/c3/c4颜色值如何被解译。
GPI_Gray:把c1作为灰度值
GPI_RGB:把c1作为红波段,c2为绿波段,c3为蓝波段,c4为alpha波段
GPI CMYK:c1作为青色波段,c2作为品红波段,c3作为黄色波段,c4作为黑色波段
GPI_HLS:c1作为色调波段,c2作为亮度波段,c3作为饱和度波段
关联一个栅格像素到一个颜色,像元值被用作颜色表中的脚本。也就是说,颜色值总是被应用为0开始递增。没有规定指出在查询颜色表之前如何一个预先制定一个机器颜色。
概览
一个波段可能含有0个或者更多的概览,每个概览被表示为一个“独立的”GDALRasterBand,概览的大小(以像素或者行为单位)与波段大小不一样,但覆盖的地理区域与全分辨率波段是一致的。
概览被用于更快速地显示低分辨率的影像。
波段通常有一个HasArbitraryOverviews属性,TRUE表示图像能够在任何波段快速的读取,但是没有截然不同的概览层级。这个被应用与一些FFT编码的图像,或者通过网关的图像(比如OGDI),这些图像能够在遥感阶段快速的向下重采样。
转载自:https://blog.csdn.net/deirjie/article/details/19574093