我只是將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),這些圖像能夠在遙感階段快速的向下重採樣。