8.GDAL数据集总体概览
GDAL使用抽象數據模型(abstract data model)來解析它所支持的數據格式,抽象數據模型中包括下面幾部分內容:
- 數據集(Dataset)
- 坐標系統(Coordinate System)
- 仿射地理坐標系統(AffineGeoTransform)
- 地面控制點(GCPs)
- 元數據(Metadata)
- 子數據集域(Subdatasets Domain)
- 圖像結構域(Image_Structure Domain)
- RPC域(RPC Domain)
- XML域(XML:Domain)
- 柵格波段(Raster Band)
- 顏色表(Color Table)
- 快視圖(Overviews)
1. 數據集(Dataset)
數據集是由柵格波段和一些相關的信息共同組成的。在一個數據集中所有的波段都具有相同的大小,即圖像行數和列數相等;相關信息包括該i數據的地理坐標、投影信息以及一些元數據信息等,其中元數據信息是由形如“名稱:值”的字符串組成的字符串列表
GDAL數據集是基于OpenGIS網格數據的標準來實現的。
2. 坐標系統(Coordinate System)
數據集中的坐標系統是使用OpenGIS的WKT字符串格式來實現的,包含以下內容。
- 坐標系統名稱
- 地理坐標系統名稱
- 大地水準面
- 橢球體名稱、長半軸和扁率
- 中央經線名稱與本初子午線的偏移量
- 投影方式
- 投影參數列表
- 單位名稱、單位與米或者弧度之間的轉換系數
- 坐標軸名稱和順序
- 以上各項對應的EEPPSG代碼
3. 元數據(Metadata)
GDAL中的元數據是對該數據的一個輔助說明,元數據的格式是由一系列形如"名稱=值"的字符串組成的列表。元數據的名稱由指定的付好構成的任何字符。
數據集中最好不要存儲太多元數據,如果元數據大小超過100KB就可能導致性能下降。
4. 子數據集域(Subdatasets Domain)
子數據集域是含有多個子數據集的字符串列表,通常用來提供指向多個影像的指針,這些影像存儲在同一個多影像文件中
5. 圖像結構域(Image_Structure Domain)
在默認域的元數據用來描述圖像的相關信息,這些元數據并沒有以特殊的方式保存在磁盤中。意思就是說,當這些元數據信息被復制到一個新的圖像中的時候,會以合適的方式存在新的圖像中。此外還有一些信息是和圖像的格式緊密關聯的。為了防止這些信息在寫入新圖像的時候被復制,將這些信息存儲在一個叫IMAGE_STRUCTURE的特殊域中,通常這里存儲的東西不會寫入到新的圖像中去。
目標,在IMAGE_STRUCTURE域中定義的項目主要有下面幾個。
-
COMPRESSION:壓縮方式用來指定數據集或者波段的壓縮方式,這個是沒有固定的壓縮類型名稱,但是一個指定的格式,如果指定壓縮方式,那么在創建的時候會使用這種壓縮方式進行壓縮。
-
NBITS:當前波段或者當前數據集的波段中真實的數據存儲bit數。通常只有非標準的數據類型才會使用該值,比如TIFF圖像中的1bit數據,在GDAL會使用GDT_Byte來表示。
-
INTERLEAVE:這個只能用在數據集中,用來表示一個像元,一行和一個波段之間的間隔,可以用來作為讀取數據的一個提示。
-
PIXELTYPE:這個值會出現在一個GDT_Byte類型的波段(或者相應的數據集)中,并且會使用SIGNEDBYTE值來表示無符號byte值介于128和255之間值應該轉換為-128到-1之間。
6. RPC域(RPCDomain)
RPC元數據域存儲的是有理函數模型的系數,該模型表示從圖像行列號與空間參考位置間的變換關系,該模型具體定義如下:
- ERR_BIAS: 偏移誤差,圖像上所有的點在水平軸上的偏移的中誤差,-1.0表示未知。
- ERR_RAND: 隨機誤差,圖像上所有的點在水平軸上的隨機中誤差,-1.0表示未知。
- LINE_OFF: 行偏移量
- SAMP_OFF: 列偏移量
- LAT_OFF: 緯度偏移量
- LONG_OFF: 經度偏移量
- HEIGHT_OFF: 高程偏移量
- LINE_SCALE: 行縮放比例
- SAMP_SCALE: 列縮放比例
- LAT_SCALE: 緯度縮放比例
- LONG_SCALE: 經度縮放比例
- HEIGHT_SCALE: 高程縮放比例
- LINE_NUM_COEFF (1-20): 行分子系數,一共20個(使用空格隔開)
- LINE_DEN_COEFF (1-20): 行分母系數,一共20個(使用空格隔開)
- SAMP_NUM_COEFF (1-20): 列分子系數,一共20個(使用空格隔開)
- SAMP_DEN_COEFF (1-20): 列分母系數,一共20個(使用空格隔開)
- 些內容都是來自GeoTIFF的RPC文檔(http://geotiff.maptools.org/rpc_prop.html)。
7. XML域(XML:Domains)
任何前綴是“xml:”的一個字符串,但不是名稱/值這種類型的,這是一個簡單的XML格式的長字符串。
8. 柵格波段(Raster Band)
一個柵格波段在GDAL中使用GDALRasterBand類來進行表示。他表示一個柵格波段、通道或者圖層。波段不能完全用來表示整個圖像,比如一個24位的RGB圖像中就含有三個波段,分別是紅波段,綠波段和藍波段。
柵格波段含有下面屬性:
- 圖像的寬和高,這個和數據集里面的定義一樣,如果這個波段是全分辨率波段的話。(這里有個說明,GDALRasterBand還可以表示金字塔的波段,如果是金字塔的波段的話,里面的寬高就和圖像的寬高不一樣)。
- 數據類型(GDALDataType)。應該是Byte、UInt16、Int16、UInt32、Int32、Float32、Float64以及復數類型CInt16、CInt32、CFloat32和CFloat64中的一個。
- 大小。通過塊是讀取數據最高效的方式,對于分塊數據,就是一個分塊大小,對于大多數圖像來說,一塊就是一行。
- 稱/值的元數據對,格式和數據集中的一員,但是包含的信息可能是波段特有的。
- 個可選的波段描述字符串。
- 個可選的用來描述NODATA值的像元值。
- 個可選的NODATA值表示的掩碼波段或者在某些時候作為透明通道。
- 選的類別名稱列表(用于分類圖)
- 選的最大值和最小值。
- 選的偏移量和縮放比例,用來對圖像的像素值進行變換,比如變換高度到米等。
- 像單位名稱,可選。比如可以用來表示高程數據的海拔。
- 段的顏色信息,是下面值中的某一個:
-
GCI_Undefined:默認值,未知
-
GCI_GrayIndex: 灰度圖
-
GCI_PaletteIndex:顏色表圖
-
GCI_RedBand: RGBA圖像的R部
-
GCI_GreenBand: RGBA圖像的G部
-
GCI_BlueBand: RGBA圖像的B部
-
GCI_AlphaBand: RGBA圖像的Alpha部
-
GCI_HueBand: HLS圖像的色調部
-
GCI_SaturationBand: HLS圖像的飽和度部
-
GCI_LightnessBand:HLS圖像的亮度部
-
GCI_CyanBand: CMYK圖像的青色部
-
GCI_MagentaBand: CMYK圖像的品紅部
-
GCI_YellowBand: CMYK圖像的黃色部
-
GCI_BlackBand: CMYK圖像的黑色部。
- 顏色表,下面有更詳細的說明
- 如果金字塔可用,含有一些關于金字塔的信息。
-
9. 顏色表(Color Table)
顏色表的定義如下,使用C語言的風格定義:
typedef struct {/- gray, red, cyan or hue-/short c1;/- green, magenta, orlightness -/ short c2;/- blue, yellow, orsaturation -/short c3;/- alpha or blackband -/short c4; } GDALColorEntry;顏色表通常是顏色調色板的一個值,對于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開始遞增。
10. 快視圖(Overviews)
一個波段中可能沒有或者有很多個快視圖。每個快視圖都是一個GDALRasterBand,略縮圖大小將和其下層的柵格大小不一樣,但是快視圖表示的區域與整個圖像的區域是一致的。
快視圖是用來快速顯示圖像用的,使用全分辨率圖像進行降采樣得到。
我們可以通過波段類中的HasArbitraryOverviews屬性來判斷是否由快視圖,如果返回TRUE表示有,就可以讀取任何分辨率的快視圖。
總結
以上是生活随笔為你收集整理的8.GDAL数据集总体概览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小白篇(十九):openLdap介绍(又
- 下一篇: java后端入门必备书籍