GDAL數據模型(轉)

GdalDatamodel  

GDAL數據模型

GDAL數據模型http://www.gdal.org/gdal_datamodel.html

原文:

翻譯:柴樹杉

該文檔簡要描述了GDAL的數據模型,該模型可以容納其他各種信息。

數據集(Dataset)座標系統仿射地理變換GCPs元數據(Metadata)SUBDATASETS域IMAGE_STRUCTURE域xml: 域Raster Band顏色表小結

一個dataset(對應GDALDataset類)是一個光柵數據以及和它有關係的信息的集合。特別地dataset包含了光柵數據的大小(像素、線等)。dataset同時也爲對應的光柵數據指定了座標系統。dataset本身還可以包含元數據,它們以一種鍵/值對的方式來組織。

GDAL的數據集是基於OpenGIS Grid Coverages的格式定義的。

Dataset的座標系統由OpenGIS WKT字符串定義,它包含了:

  • 一個全局的座標系名稱。
  • 一個地理座標系名稱。
  • 一個基準標識符。
  • 橢球體的名字。長半軸(semi-major axis)和反扁率(inverse flattening)。
  • 初子午線(prime meridian)名和其與格林威治子午線的偏移值。
  • 投影方法類型(如橫軸莫卡託)。
  • 投影參數列表(如中央經線等)。
  • 一個單位的名稱和其到米和弧度單位的轉換參數。
  • 軸線的名稱和順序。
  • 在預定義的權威座標系中的編碼(如EPSG)。

更多信息請參考OpenGIS WKT座標系統定義,以及osr教程文檔和OGRSpatialReference類的描述文檔。

在GDAL中,返回座標系統的函數是GDALDataset::GetProjectionRef()。它返回的座標系統描述了地理參考座標,暗含着仿射地理參考轉換,這地理參考轉換是由GDALDataset::GetGeoTransform()來返回。由GCPs地理參考座標描述的座標系統是由 GDALDataset::GetGCPProjection()返回的。

注意,返回的座標系統字符串“”表示未知的地理參考座標系統。

GDAL數據集有兩種方式描述柵格位置(用點/線座標系)以及地理參考座標系之間的關係。第一種也是比較常用的是使用仿射轉換,另一種則是GCPs。

仿射變換由6個參數構成,它們由GDALDataset::GetGeoTransform()返回它們把點/線座標,用下面的關係轉將點/線影射到地理座標:

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

假設影像上面爲北方,GT2和GT4參數爲0,而GT1是象元寬,GT5是象元高,(GT0,GT3)點位置是影像的左上角。

注意,上面所說的點/線座標系是從左上角(0,0)點到右下角,也就是座標軸從左到右增長,從上到下增長的座標系(即影象的行列從左下角開始計算)。點/線位置中心是(0.5,0.5)。

數據集可以由一系列控制點來定義空間參考座標系。所有的GCPs共用一個地理參考座標系,由GDALDataset::GetGCPProjection()返回。每個GCP(對應GDAL_GCP類)包含下面內容:

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

字符串pszid是本GCP在數據集中一系列GCP點中惟一的標示字符串(通常是數字)。字符串pszInfo通常爲空,但是也可以包含用戶針對GCP定義的一些文本信息。甚至還可能是GCP狀態中包含機器可分析信息,雖然現在還支持。

座標(dfGCPPixel,dfGCPLine)是柵格中的GCP位置。座標(dfGCPX,dfGCPY,dfGCPZ)是聯合的地理參考位置(dfGCPZ通常是0)。

GDAL數據模型沒有實現由GCPs產生座標系的變化的機制,而是把具體的操作留給用戶實現。通常1到5階多項式是常用的方法。

通常一個數據集會包含仿射地理變換,或GCPS中的一個,或者兩個都沒有。兩個都有很少見,而且無法用權威座標系定義。

GDAL元數據是一種輔助的數據格式,並且以鍵/值對序列的方式呈現。一般鍵的名稱有嚴格的定義(沒有空白、或某些特殊字符等)。鍵所對應的值 可以是任意的長度,包含任意的內容(NULL字符除外)。元數據處理系統一般不能處理很大的數據,例如一個大於100K的數據很可能導致處理的終止。

雖然某些鍵現在可能沒有,但是以後也可能會被定義。一些格式的數據可以支持一些基本的元數據(可以由用戶自己定義),可以使用驅動程序訪問這些鍵/值。例如,如果數據含有date/time標誌,TIFF格式的驅動程序可能只是簡單地返回基本的信息:

TIFFTAG_DATETIME=1999:05:11 11:29:56

元數據的鍵/值對還可以被組織到某些域中,默認的域是沒有名字的。當然,爲了保存某些特殊的信息可能需要定義特殊的域。目前雖然不能列舉出一個對象所需要的所有域,但是程序可以測試任何我們已經知道確切含義的域。

SUBDATASETS域保存了一個子datasets列表。這個列表通常是對應一個複合影象中每個子影象的位置(像HDF或NITF)。例如一個由4個影象組成的NITF可能含有類似下面的子datasets列表:

  • 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
  • SUBDATASET_3_NAME=NITF_IM:2:multi_1b.ntf
  • SUBDATASET_3_DESC=Image 3 of multi_1b.ntf
  • SUBDATASET_4_NAME=NITF_IM:3:multi_1b.ntf
  • SUBDATASET_4_DESC=Image 4 of multi_1b.ntf
  • SUBDATASET_5_NAME=NITF_IM:4:multi_1b.ntf
  • SUBDATASET_5_DESC=Image 5 of multi_1b.ntf

NAME爲後綴的鍵所對應的值可以傳遞給GDALOpen()用於訪問文件。以DESC爲後綴的鍵所對應的值可以以一種友好的方式顯示給用戶。

默認域中的元數據一般和影象有關,但是和影象的具體格式無關。換言之,與影象格式無關的信息在複製dataset的時候一般也會被複制。爲了處理那些與影象格式相關的數據,一般將相關的鍵/值對放到IMAGE_STRUCTURE域中,並且在複製dataset的時候可以不被複制。

IMAGE_STRUCTURE域中的一個項是數據的壓縮方式,對應的鍵名爲COMPRESSION,對應的值說明的壓縮的方式。

任何以"xml:"爲前綴名的域都不是一個普通的鍵/值對方式的元數據。它是一個單一的XML文檔,以一個大的字符串方式保存

一個波段的光柵數據對應GDAL中的 GDALRasterBand類。它描述了單個波段的band/channel/layer。它並不是一次描述整個影象。例如,一個24bit的RGB影象在一個dataset中一般被描述爲三個波段,分別對應red/green/blue三中顏色。

一個波段的光柵數據具有以下性質:

  • 行列數。如果沒有抽樣的話,該值和dataset定義的相同。
  • 數據類型 (GDALDataType)。可以是Byte、UInt16、Int16、UInt32、Int32、Float32、Float64,或者是複合類型CInt16、CInt32、CFloat32或 CFloat64。
  • 塊的大小。這是建議的緩衝塊的大小。對於塊式存儲的影象來說,可能是一個塊的大小。對於以掃描線方式的影象,可能是一個掃描線的大小。
  • 元數據中的name/value列表,和dataset中相同,但是可能更側重當前波段的特徵。
  • 可選擇的參數(字符串)。
  • An optional list of category names (effectively class names in a thematic image).
  • An optional minimum and maximum value.
  • An optional offset and scale for transforming raster values into meaning full values (ie translate height to meters)
  • 可選的光柵名稱。這個特性可以用來指定一些比較重要的數據。
  • 每個波段解釋,具體爲:
    1. GCI_Undefined: 默認,未知信息。
    2. GCI_GrayIndex: 爲一個獨立的灰度影象。
    3. GCI_PaletteIndex: this raster acts as an index into a color table
    4. GCI_RedBand: RGB或RGBA影象的紅色波段。
    5. GCI_GreenBand: RGB或RGBA影象的綠色波段。
    6. GCI_BlueBand: RGB或RGBA影象的藍色波段。
    7. GCI_AlphaBand: RGBA影象的alpha通道。
    8. GCI_HueBand: HLS影象的色調。
    9. GCI_SaturationBand: HLS影象的飽和度。
    10. GCI_LightnessBand: HLS影象的光強。
    11. GCI_CyanBand: CMY或CMYK影象的cyan波段。
    12. GCI_MagentaBand: CMY或CMYK影象的magenta波段。
    13. GCI_YellowBand: CMY或CMYK影象的yellow波段。
    14. GCI_BlackBand: CMYK影象的black波段。
  • 顏色表,描述光柵數據的更多的細節。
  • Knowledge of reduced resolution overviews (pyramids) if available.

一個顏色表包含0個或多個顏色結構。結構體定義如下:

typedef struct
{
/- gray, red, cyan or hue -/

short c1;

/- green, magenta, or lightness -/

short c2;

/- blue, yellow, or saturation -/

short c3;

/- alpha or blackband -/

short c4;

} GDALColorEntry;

顏色表同時還對應一個調色板(GDALPaletteInterp),GDALColorEntry中的c1/c2/c3/c4的值可以作爲調色板索引得到真正的顏色值。

  • GPI_Gray: c1作爲灰度值。
  • GPI_RGB: c1/c2/c3依次爲Red/Green/Blue,c4對應alpha通道。
  • GPI_CMYK: c1爲cyan,c2爲magenta,c3爲yellow,c4爲black。
  • GPI_HLS: c1爲hue,c2爲lightness,c3爲saturation。

用顏色表表示時,每個像素保存的只是像素顏色在顏色表的位置。每個顏色的索引從0開始遞增。這裏並沒有提供針對顏色表的縮放機制。

A band may have zero or more overviews. Each overview is represented as a "free standing" GDALRasterBand. The size (in pixels and lines) of the overview will be different than the underlying raster, but the geographic region covered by overviews is the same as the full resolution band.

The overviews are used to display reduced resolution overviews more quickly than could be done by reading all the full resolution data and downsampling.

Bands also have a HasArbitraryOverviews property which is TRUE if the raster can be read at any resolution efficiently but with no distinct overview levels. This applies to some FFT encoded images, or images pulled through gateways (like OGDI) where downsampling can be done efficiently at the remote point.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章