文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
1.背景
為利於項目實施,團隊用AE寫過一個插件式的工具集,主要包括了數據入庫、數據統計、數據修改、數據發布等功能。
由於arcgis環境的不同,數據庫的環境不同,導致工具的版本出現了arcgis10.0,10.1,10.2,以及相對的Oracle版本和mysql版本,從而使維護量直線上升。
痛定思痛,我們決定采用GDAL來將各工具逐一開源化,並且將不同數據庫操作封裝成同一個DLL使用,目標是將所有的版本整合成一個通用版本。
2.GDAL簡介
GDAL(Geospatial Data Abstraction Library)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。它利用抽象數據模型來表達所支持的各種文件格式,其抽象數據模型包括數據集(dataset),坐標系統,仿射地理坐標轉換(Affine Geo Transform), 大地控制點(GCPs), 元數據(Metadata),柵格波段(Raster Band),顏色表(Color Table),子數據集域(Subdatasets Domain),圖像結構域(Image_Structure Domain),XML域(XML:Domains)。它還有一系列命令行工具來進行數據轉換和處理。在遙感影像處理領域,GDAL是一個被廣泛使用的庫。我們所常見的GDAL均是C++版本,不過目前它也有了C#以及python、Java版本。
這里,我們所用的主要是針對矢量數據(SHP)的處理,所以我們還要用的GDAL的分支, OGR庫。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來注冊和管理。
3.GDAL(C#)版本下載和引用
下載編譯后的GDAL地址:http://www.gisinternals.com/sdk/
點擊需要下載的DLL集:
將下載到的文件bin下的dll拷貝至debug下,此為GDAL運行需要依賴的DLL。進入gdal\csharp目錄,將以_csharp結尾的dll拷貝出來,添入引用即可。
4.開發實踐
GDAL對中文支持容易出現問題,
首先通過設置運行環境支持中文:
其次,對GDAL設置中文編碼:
我們將對SHP的常用操作進行了封裝,主要為要素的增刪查改操作、要素字段的操作、SHP的操作:
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^