□ 楊明 嚴(yán)宇 高忠春
(黑龍江中海經(jīng)測(cè)空間信息技術(shù)有限公司,黑龍江哈爾濱 150026)
基于GDAL/OGR的測(cè)繪成果檢查方法
□ 楊明 嚴(yán)宇 高忠春
(黑龍江中海經(jīng)測(cè)空間信息技術(shù)有限公司,黑龍江哈爾濱 150026)
測(cè)繪內(nèi)業(yè)成果通常都有著嚴(yán)格的要求,包括字段名稱、字段類型及賦值等方面。為了提高內(nèi)業(yè)成果的審核效率,可以開發(fā)專用工具來實(shí)現(xiàn)自動(dòng)檢查。本文以開源的GIS庫GDAL/OGR為例,詳細(xì)介紹測(cè)繪成果審核的流程、方法及實(shí)行方式。同時(shí)介紹GDAL/OGR庫,拋磚引玉,拓展開源GIS技術(shù)在測(cè)繪行業(yè)中的應(yīng)用。
GDAL/OGR;開源GIS
測(cè)繪內(nèi)業(yè)數(shù)據(jù)處理有一套完善的流程來保證數(shù)據(jù)生產(chǎn)的質(zhì)量,結(jié)構(gòu)設(shè)計(jì)、生產(chǎn)、審核、提交等多個(gè)環(huán)節(jié)均要嚴(yán)格按照設(shè)計(jì)規(guī)則進(jìn)行,特別是審核部分。內(nèi)業(yè)成果數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)時(shí),對(duì)數(shù)據(jù)的命名、字段、字段類型、字段長(zhǎng)度、字段排序、字段賦值等做有明確的定義和約束,在成果數(shù)據(jù)提交前,必須按照設(shè)計(jì)規(guī)則對(duì)每一條數(shù)據(jù)進(jìn)行審核。
大量的數(shù)據(jù)審核工作不可能由人手工完成,人工審核工作量巨大,耗時(shí)較長(zhǎng),我們可以設(shè)計(jì)一款小工具,使用計(jì)算機(jī)來自動(dòng)完成數(shù)據(jù)質(zhì)量的審核。
內(nèi)業(yè)成果結(jié)果多為shape file、coverage、ESRI Geodatabase等通用的矢量數(shù)據(jù)格式,對(duì)這些格式的數(shù)據(jù)進(jìn)行讀取操作需要使用成熟的GIS平臺(tái),比如ArcGIS、SuperMap和GDAL/OGR等。由于ArcGIS、SuperMap是商業(yè)軟件,且有嚴(yán)格的版本限制;GDAL/OGR是一套開源的GIS庫,使用GDAL/OGR可以擺脫授權(quán)、版本等依賴,不影響現(xiàn)有的作業(yè)環(huán)境。因此我們選用GDAL/OGR來開發(fā)數(shù)據(jù)審核工具。
GDAL/OGR是一套開源的GIS庫,提供各種GIS算法和多種開發(fā)語言的支持,如c++、.Net、Java、Perl、Python等;廣泛用于多個(gè)GIS平臺(tái),如ESRI的ARCGIS,Google Earth和跨平臺(tái)的 GRASS GIS系統(tǒng)。利用GDAL/OGR庫,可以使基于Linux的地理空間數(shù)據(jù)管理系統(tǒng)提供對(duì)矢量和柵格文件數(shù)據(jù)的支持。
GDAL(Geospatial Data Abstraction Library)是一個(gè)在X/MIT許可協(xié)議下的柵格空間數(shù)據(jù)轉(zhuǎn)換庫。它利用抽象數(shù)據(jù)模型來表達(dá)所支持的各種文件格式。它還有一系列命令行工具來進(jìn)行數(shù)據(jù)轉(zhuǎn)換和處理。
OGR是GDAL項(xiàng)目的一個(gè)分支,功能與GDAL類似,提供對(duì)矢量數(shù)據(jù)的支持。OGR對(duì)矢量數(shù)據(jù)的支持十分強(qiáng)大,幾乎涵蓋了目前能用到的所有矢量數(shù)據(jù)格式,如Arc/Info Binary Coverage、Arc/Info E00、AutoCAD DXF、Comma Separated Value(.csv)、ESRI File Geodatabase、ESRI Personal GeoDatabase、ESRI Shapefile、MapInfoTAB and MIF/MID、GeoJSON、KML、GML、PDS、SVG、MSSQLSpatial、OracleSpatial等。
1)數(shù)據(jù)審核流程
內(nèi)業(yè)成果數(shù)據(jù)的審核,其核心只有一個(gè),就是對(duì)所有數(shù)據(jù)進(jìn)行規(guī)則匹配,如果全部滿足規(guī)則要求,則是合格數(shù)據(jù);如果有一條規(guī)則不符合,則視為不合格數(shù)據(jù)。因此數(shù)據(jù)的審核流程就是對(duì)所有數(shù)據(jù),對(duì)照設(shè)計(jì)規(guī)則一一比對(duì)。首先審核規(guī)則一,如果符合規(guī)則一,則繼續(xù)比對(duì)規(guī)則二,否則退出。如此循環(huán),直到比對(duì)完規(guī)則庫中所有的規(guī)則,如果全部符合,則判定為合格的數(shù)據(jù),否則判定為不合格數(shù)據(jù)。
2)GDAL/OGR數(shù)據(jù)讀取方法
GDAL/OGR庫目前最新版本為1.11,可上GDAL的網(wǎng)站http://www.gdal.ogr去下載最新的源代碼及編譯后的成果。
GDAL/OGR是使用c++開發(fā)的,也支持. Net、Perl、Java、Python等其它語言。為了使客戶端更友好,界面更漂亮,我們選用.Net來進(jìn)行開發(fā)。
如果使用.Net開發(fā),需要將GDAL/OGR編譯出C#需要的接口,可參照http://trac. osgeo.org/gdal/wiki/GdalOgrCsharpCompile 上的說明,進(jìn)行編譯,編譯后產(chǎn)生gdal111.dll、gdal_csharp.dll、gdal_wrap.dll、gdalconst_csharp. dll、gdalconst_wrap.dll、ogr_csharp.dll、ogr_wrap. dll、osr_csharp.dll、osr_wrap.dll等幾個(gè)核心的dll文件,然后再將GDAL/OGR的其它插件一并復(fù)制到工程目錄,添加引用即可。
GDAL/OGR的編譯方法網(wǎng)上已經(jīng)有很豐富的資料,在此不再贅述,如果不想自己編譯,也可以上網(wǎng)下載別人編譯好的GDAL/OGR dll。
使用GDAL/OGR讀取矢量數(shù)據(jù)的步驟為:①定義相關(guān)數(shù)據(jù)類型的驅(qū)動(dòng),②使用該驅(qū)動(dòng)打開矢量數(shù)據(jù)庫,③從打開的庫對(duì)象中獲取每一個(gè)圖層對(duì)象,④從圖層對(duì)象中獲取圖層的相關(guān)屬性及字段屬性。
相關(guān)關(guān)鍵代碼如下:
1)UI設(shè)計(jì)
內(nèi)業(yè)成果檢查工具設(shè)計(jì)界面簡(jiǎn)潔,操作簡(jiǎn)單,只需要兩步操作即完成審核工作:一是選擇待查的庫文件,二是執(zhí)行檢查。因此界面設(shè)計(jì)分兩部分:一是庫文件選擇框,二是展示檢查結(jié)果的列表框。
界面第一部分文件選擇框,由一個(gè)TableControl控件、一個(gè)TextBox控件、兩個(gè)Button控件和其它輔助的Label控件組成。其中TableControl包含三個(gè)頁簽,分別對(duì)應(yīng)三種常用的數(shù)據(jù)格式:ShapeFile、Personal-Geodatabase、FileGeodatabase。一個(gè) TextBox控件用于顯示選擇的文件路徑,兩個(gè)Button分別為打開文件選擇對(duì)話框和執(zhí)行庫文件的初始化。
界面第二部分由一個(gè)GridView控件和一個(gè)Button組成。點(diǎn)擊Button執(zhí)行數(shù)據(jù)審校,GridView負(fù)責(zé)顯示審查結(jié)果。
2)代碼實(shí)現(xiàn)
根據(jù)設(shè)計(jì)的幾個(gè)步驟,結(jié)合實(shí)際的用戶界面操作,代碼實(shí)現(xiàn)主要分獲取數(shù)據(jù)文件、獲取Layer對(duì)象、審核圖層命名和審核字段類型等幾部分
內(nèi)業(yè)成果校驗(yàn)工具本身只有一個(gè)可執(zhí)行文件——外業(yè)成果校驗(yàn)工作.exe,加上GDAL/OGR和SQLite等所有支持的底層庫,共40個(gè)文件,30M體積,支持xcopy,不需要安裝部署。相對(duì)于龐大的ArcGIS Engine,可謂短小精悍,用一個(gè)U盤攜帶即可完成隨時(shí)隨地的數(shù)據(jù)審核工作,且與當(dāng)前的作業(yè)環(huán)境不沖突。
執(zhí)行外業(yè)成果校驗(yàn)工作.exe,打開主程序,選擇指定的數(shù)據(jù)類型,如 Personal Geodatabase,打開待審核的庫文件,點(diǎn)擊初始化GDB按鈕,程序自動(dòng)將庫文件中的圖層信息,及審核規(guī)則項(xiàng)列出來。
點(diǎn)擊檢查,程序自動(dòng)按規(guī)則對(duì)庫文件中的所有數(shù)據(jù)進(jìn)行一一審核,將不符合規(guī)則相應(yīng)記錄詳細(xì)顯示出來。如圖:
本工具目前只支持對(duì)數(shù)據(jù)的規(guī)則匹配檢查,依托GDAL/OGR對(duì)矢量數(shù)據(jù)的強(qiáng)大讀寫功能,我們也可以開發(fā)數(shù)據(jù)的自動(dòng)糾錯(cuò)功能,以及空間拓?fù)錂z查等。
本文通過對(duì)PersonalGeodatabase、Shapefile等矢量數(shù)據(jù)的讀取,利用GDAL/OGR庫的強(qiáng)大功能,實(shí)現(xiàn)了數(shù)據(jù)質(zhì)量的規(guī)則匹配型的自動(dòng)審核。使用GDAL/OGR最大的優(yōu)勢(shì)是開源GIS庫不需要商業(yè)授權(quán)、不依賴第三方、沒有版本沖突、不需要安裝部署,不影響當(dāng)前作業(yè)環(huán)境。在類似的其它應(yīng)用場(chǎng)景中,我們也可以考慮采用開源的GIS庫來進(jìn)行定制開發(fā),以提高工作效率和數(shù)據(jù)生產(chǎn)的質(zhì)量。
目前開源GIS的發(fā)展也是百花齊放,各種開源GIS軟件層出不窮,支持c++、.Net、Java等多種語言和Windows、Mac、Linux等操作系統(tǒng),提供比商業(yè)GIS更靈活、豐富的選擇。常見的GIS算法庫有使用C++語言開發(fā)的GDAL/OGR、和.net開發(fā)的DotSpatial;桌面GIS軟件有QGIS、GRASS、SharpMap、MapWindows、Udig等;WebGIS有MapServer、GeoServer、OpenLayers等;三維GIS有OSG(OpenSceneGraph)、OSG Earth、WorldWind等。用好了這些開源的GIS軟件,在很多領(lǐng)域,不管是數(shù)據(jù)生產(chǎn)還是業(yè)務(wù)應(yīng)用,我們都完全可以擺脫對(duì)于商業(yè)GIS平臺(tái)的依賴,并將大大有利于我們提高業(yè)務(wù)人員水平、降低生產(chǎn)成本和提高生產(chǎn)效率。
【1】GDAL API,http://www.gdal.org/
【2】OGR Vector Formats,http://www.gdal.org/ogr_formats.html
【3】GDAL/OGR In CSharp,http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp
【4】曾菲.對(duì)基礎(chǔ)地理信息系統(tǒng)數(shù)據(jù)質(zhì)量的探討[J].測(cè)繪與空間地理信息,2011,34(3):267-269.
楊明(1985年——),男,黑龍江哈爾濱人,工程師,學(xué)士,主要從事海洋測(cè)繪及地理信息系統(tǒng)方面的應(yīng)用研究工作。
P205
B
2095-7319(2014)04-0050-04