崔虎平,江 南
(信息工程大學地理空間信息學院,河南鄭州450052)
長期以來,地理數(shù)據(jù)處理過程中的數(shù)據(jù)格式轉換一直是地理信息系統(tǒng)的研制開發(fā)與應用過程中必不可少的,也是花費時間、經(jīng)費比較大的模塊。不同的地理信息系統(tǒng)應用程序均需要讀取、轉換不同格式的地理數(shù)據(jù),然后進行查詢分析。這種處理過程如圖1所示。
圖1 傳統(tǒng)數(shù)據(jù)格式轉換流程
每一個應用程序均需要編寫大量的代碼用于讀取不同的文件格式,進行重復的工作,因此,需要建立一個統(tǒng)一的數(shù)據(jù)訪問接口,使得應用軟件的開發(fā)脫離這些瑣碎復雜的數(shù)據(jù)格式轉換。OGR簡單要素庫(OGR simple feature library)就是最有效的解決方案之一。
OGR是開源C++代碼庫,可以提供讀取(部分可以寫入)大量的矢量數(shù)據(jù)格式文件,如 ESRI Shape、SDTS、PostGIS、Oracle Spatial、MapInfo mid/mif和TAB文件等格式。隨著開源項目的發(fā)展,OGR目前已作為地理空間數(shù)據(jù)抽象庫(open geospatial data abstraction library,GDAL)的一部分,GDAL可完成柵格地理數(shù)據(jù)的讀寫轉換,柵格數(shù)據(jù)與矢量數(shù)據(jù)處理相結合,相得益彰,使得GDAL/OGR在許多開源項目中得到了更廣泛的應用,如熟悉的 Google Earth、ESRI ArcGIS 9.2+、GRASS、OpenEV、UMN MapServer、Quantum GIS(QGIS)、MapWindow 等十幾個開源項目。
OGR目前支持的矢量數(shù)據(jù)格式如表1所示。
表1 OGR支持的矢量數(shù)據(jù)格式
其中,是否允許保存為No,表示當前只支持讀取該文件格式;而Yes表示既可以讀取此文件格式還可以寫此文件格式。因此為了將某一文件格式(如MapGIS明碼格式)轉換為其他文件格式,只要在OGR增加相應的讀取該文件格式代碼,即可保存為可建立的文件格式。
本文就是使用OGR提供的矢量數(shù)據(jù)模型,在VC++開發(fā)環(huán)境下,增加讀取MapGIS明碼數(shù)據(jù)文件格式的相關代碼,實現(xiàn)由MapGIS明碼數(shù)據(jù)格式轉換為其他矢量數(shù)據(jù)格式的功能。其流程如圖2所示。
圖2 基于OGR的數(shù)據(jù)格式轉換
在OGR中,不同的數(shù)據(jù)格式對應不同的驅動(Driver),OGR統(tǒng)一管理所有支持的驅動,使用驅動完成地理數(shù)據(jù)格式的讀取與保存。OGR中類的框架關系如圖3所示。
圖3 OGR中類的框架關系
其中,
1)OGRSFDriverRegistrar:負責注冊并統(tǒng)一管理所有驅動;
2)OGRSFDriver:對應于某一文件格式,可以實現(xiàn)打開數(shù)據(jù)源、復制、刪除等功能;
3)OGRDataSource:表示文件或數(shù)據(jù)庫的抽象類,由用戶繼承實現(xiàn),包含一個或多個圖層(OGRLayer);
4)OGRLayer:表示數(shù)據(jù)源中要素的抽象類,由用戶繼承實現(xiàn);
5)OGRSpatialReference:空間參考類;
6)OGRFeature:表示某一幾何要素,包括屬性信息;
7)OGRGeometry:幾何對象類。
由于OGR是基于OpenGIS簡單要素數(shù)據(jù)模型建立起來的,數(shù)據(jù)的類型、方法命名均符合OpenGIS規(guī)范,因此非常容易移植于其他符合OGC規(guī)范的軟件系統(tǒng)中。OGR使用的幾何數(shù)據(jù)對象關系如圖4所示。
圖4 OGR中的幾何數(shù)據(jù)對象關系
為了讀取新的數(shù)據(jù)格式,主要實現(xiàn)OGR中以下3個類的接口:OGRSFDriver、OGRDataSource與OGRLayer。在實現(xiàn)以上接口以后,使用OGRSFDriverRegistrar類函數(shù)RegisterDriver(new OGRMapGISDriver)將新的驅動增加到OGR中。
將新的驅動增加到OGR驅動列表后,就可以使用OGR完成相應數(shù)據(jù)格式的讀取功能,使用OGR可以將源數(shù)據(jù)格式轉換為驅動列表中可保存的數(shù)據(jù)格式。
使用OGR完成數(shù)據(jù)格式轉換的主要流程如圖5所示。
圖5 實現(xiàn)數(shù)據(jù)格式轉換的主要流程
第1步:得到注冊的驅動。
第2步:根據(jù)指定的驅動名,得到驅動對象。
第3步:使用驅動打開數(shù)據(jù)文件,得到數(shù)據(jù)源對象。
第4步:根據(jù)指定的目標驅動名,得到目標驅動對象,方法同第2步。
第5步:建立輸出數(shù)據(jù)源。
第6步:根據(jù)源目標數(shù)據(jù)中圖層個數(shù),依次在目標數(shù)據(jù)源中建立圖層。
第7步:建立目標圖層的屬性結構。
第8步:依次寫入源數(shù)據(jù)集中的要素對象。
第9步:釋放內(nèi)存。
綜合以上處理過程,筆者編寫了通用地理數(shù)據(jù)格式轉換工具,界面圖6所示。
矢量地理數(shù)據(jù)格式轉換是地理信息系統(tǒng)開發(fā)與應用過程的基礎之一。本文研究了OGR實現(xiàn)矢量地理數(shù)據(jù)格式轉換的原理,并在OGR中編程實現(xiàn)了MapGIS明碼格式驅動的開發(fā),完成了向其他數(shù)據(jù)格式之間的轉換。其重要意義在于數(shù)據(jù)格式之間的轉換不再需要大量的商業(yè)軟件來完成,節(jié)約了大量的軟件購置費用,同時軟件的開發(fā)思路對于其他數(shù)據(jù)格式的轉換具有借鑒意義。
仍存在以下不足:
1)由于OGR采用符合OpenGIS的簡單幾何數(shù)據(jù)模型,因而MapGIS數(shù)據(jù)格式向其他數(shù)據(jù)格式轉換時丟失了其拓撲關系。
2)目前完成矢量數(shù)據(jù)轉換過程時保持空間參考系保持不變,如何在轉換過程中增加地理參考系有待于進一步研究。
[1]易善楨,李琦,承繼成.空間信息的共享與互操作[J].測繪通報,2000(8):17-19.
[2]孫立堅,朱翊,劉紀平,等.GIS數(shù)據(jù)交換理論與系統(tǒng)架構的研究[J].測繪通報,2007(9):57-60.
[3]王家耀.空間信息系統(tǒng)原理[M].北京:科學出版社,2001.
[4]華一新,吳升,趙軍喜.地理信息系統(tǒng)原理與技術[M].北京:解放軍出版社,2001.
[5]蘇潔,周東方,岳春生.GPS車輛導航中的實時地圖匹配算法[J].測繪學報,2001,30(3):252-256.