GDAL(Geospatial Data Abstraction Library)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。該項目由Frank Warmerdam教授於1998年發起。 它利用抽象數據模型來表達所支持的各種文件格式。 它還有一系列命令行工具來進行數據轉換和處理。 OGR(OpenGIS Simple Features Reference Implementation)是GDAL項目的一個子項目, 提供對矢量數據的支持。 一般把這兩個庫合稱爲GDAL/OGR,或者簡稱爲GDAL。
由於MIT協議的開放性,任何人都可以基於GDAL庫來編寫自己的軟件而不需要原作者的授權, 所以有很多著名的GIS軟件都使用了GDAL/OGR庫, 包括商業公司ESRI的ArgGIS,Google的Google Earth和開源的GRASS GIS系統。 GDAL/OGR支持多種操作系統,可以同時對Linux和windows下的地理空間數據管理系統提供百餘種矢量和柵格文件類型的支持。
GDAL/OGR使用面向對象的C++語言編寫,這令該庫在支持百餘種格式的同時,還具有很高的執行效率。 GDAL/OGR同時還提供多種主流編程語言的綁定,除了C和C++語言之外, 用戶還可以在Perl、python、VB6、Ruby、Java、C#等語言中調用GDAL, 這令GDAL的應用變得非常廣泛。 但是目前GDAL的中文資料較少,本人在美國學習期間, 主要參考了GDAL的官方網站和 Utah State University 的GDAL Python培訓課程 。
下面簡要介紹GDAL/OGR的體系結構
1.1. GDAL
GDAL提供對多種柵格數據的支持,包括Arc/Info ASCII Grid(asc),GeoTiff (tiff),Erdas Imagine Images(img),ASCII DEM(dem) 等格式。
GDAL使用抽象數據模型(abstract data model)來解析它所支持的數據格式,抽象數據模型包括數據集(dataset), 座標系統,仿射地理座標轉換(Affine Geo Transform), 大地控制點(GCPs), 元數據(Metadata),柵格波段(Raster Band),顏色表(Color Table), 子數據集域(Subdatasets Domain),圖像結構域(Image_Structure Domain),XML域(XML:Domains)。
GDAL包括如下幾個部分:
- GDALMajorObject類:帶有元數據的對象。
- GDALDdataset類:通常是從一個柵格文件中提取的相關聯的柵格波段集合和這些波段的元數據;GDALDdataset也負責所有柵格波段的地理座標轉換(georeferencing transform)和座標系定義。
- GDALDriver類:文件格式驅動類,GDAL會爲每一個所支持的文件格式創建一個該類的實體,來管理該文件格式。
- GDALDriverManager類:文件格式驅動管理類,用來管理GDALDriver類。
1.2. OGR
OGR提供對矢量數據格式的讀寫支持,它所支持的文件格式包括:ESRI Shapefiles, S-57, SDTS, PostGIS,Oracle Spatial, Mapinfo mid/mif , Mapinfo TAB。
OGR包括如下幾部分:
- Geometry:類Geometry (包括OGRGeometry等類)封裝了OpenGIS的矢量數據模型,並提供了一些幾何操作,WKB(Well Knows Binary)和WKT(Well Known Text)格式之間的相互轉換,以及空間參考系統(投影)。
- Spatial Reference:類OGRSpatialReference封裝了投影和基準面的定義。
- Feature:類OGRFeature封裝了一個完整feature的定義,一個完整的feature包括一個geometry和geometry的一系列屬性。
- Feature Definition:類OGRFeatureDefn裏面封裝了feature的屬性,類型、名稱及其默認的空間參考系統等。一個OGRFeatureDefn對象通常與一個層(layer)對應。
- Layer:類OGRLayer是一個抽象基類,表示數據源類OGRDataSource裏面的一層要素(feature)。
- Data Source:類OGRDataSource是一個抽象基類,表示含有OGRLayer對象的一個文件或一個數據庫。
- Drivers:類OGRSFDriver對應於每一個所支持的矢量文件格式。類OGRSFDriver由類OGRSFDriverRegistrar來註冊和管理。