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