吳新強,周 婭,王如意,張會兵,秦興國
(桂林電子科技大學計算機科學與工程學院,桂林 541004)
在地理信息系統(GIS)中,能實現不同平臺之間數據的轉換,對日后數據共享是至關重要的。目前我國國土資源部門大多數單位主要使用國產MapGIS軟件,很多GIS數字資料的數據加工、建庫工作都是基于MapGIS平臺實現的[1]。而美國ESRI公司的旗艦產品ArcGIS則占領著當今國際地理信息系統的主要市場,該系統在對空間數據庫開發、一體化管理方面具有獨特的優勢。近年來,我國許多國土資源信息的數據變更、數據應用都是在ArcGIS平臺中進行的,因此這2個GIS平臺間的數據轉換需求常遇而迫切[1]。
目前市場上已有很多相關的轉換軟件,由于MapGIS不支持OpenGIS標準,雖然其本身提供了轉換功能,包括轉換成ArcGIS支持的E00格式或者Shape格式等,但還存在很多問題:如屬性丟失,轉換后屬性都是缺省屬性,不能進行批量轉換;由于轉換后地質符號庫不匹配,ArcGIS會以默認的符號對圖形進行渲染,出現符號、注記及顏色丟失等現象。許多研究人員也通過不同的改進方式進行數據轉換[1-3],但均沒有提及符號庫的轉換問題,因此多數MapGIS用戶在數據共享方面仍有不少障礙。
本文基于MapGIS SDK和ArcGISObjects提供的COM組件進行二次開發,實現了將MapGIS文件以及地質符號庫轉換到ArcGIS平臺支持的文件格式,解決了MapGIS文件數據到ArcGIS數據轉換信息丟失問題,實現了符號共享與符號庫跨平臺[4]的應用。
將MapGIS數據轉換成ArcGIS平臺下支持的文件數據格式,需要通過MapGIS提供的SDK開發包調用相應的接口實現MapGIS數據文件的讀取,再通過ArcGIS提供的Objects開發包調用相應的接口實現數據向目標文件的寫入和生成。2個GIS平臺的數據格式不同,其數據文件對照如表1[5]所示。

表1 M apGIS與ArcGIS數據文件對照Tab.1 Data file comparison from MapGIS to ArcGIS
1.1.1 MapGIS 源數據格式
1)MapGIS 加 密 二 進 制 格 式 (.wt,.wl,.wp)。MapGIS數據格式的選擇主要依據是該格式是否能包含所有的MapGIS所提供的屬性信息,即包括空間信息和屬性信息。利用E00,shapfile等中間格式進行數據轉換存在屬性丟失等缺點。本文通過MapGIS開發包提供的接口讀取MapGIS加密二進制格式文件的方式實現數據轉換,不經過第三方,確保數據的空間對象圖形坐標和屬性值轉換前后完全一致,保證數據的正確性,提高轉換效率。
2)地質符號系統庫格式(.lib)。在MapGIS平臺下,該格式用來存儲地質符號(包括點符號、線符號、面符號)以及顏色庫,該地質符號系統庫是地質符號轉換的原始數據源。
3)可擴展標記語言(extensible markup language,XML)格式。由于MapGIS SDK沒有提供可以讀取系統庫中符號的數據源的 API,所以使用XML文件存儲符號庫中的數據,繼而解析XML文件,可以做到無屬性丟失,從而提高開發效率。
1.1.2 ArcGIS 目標數據格式
1)shapefile文件格式(.shp)。ArcGIS數據格式的選擇主要依據是該格式是否能保存MapGIS提供的所有信息,即包括空間信息和屬性信息。由于shapefile文件對于空間要素的存儲方式是按照點、線、面進行存儲的,類似于MapGIS的數據存儲結構,同時也是MapGIS和ArcGIS都支持的中間文件,故本文選擇ArcGIS識別加載的shapefile文件數據格式來完成數據轉換。
2)工程文件格式(.mxd)。shapefile文件無法渲染圖形文件的顏色以及符號,為避免屬性信息丟失,工程文件中不僅存儲生成的shapefile文件信息,還同時存儲對shapefile文件進行渲染的信息。
3)圖層文件格式(.lyr)。圖層文件用來保存在ArcGIS中shapefile文件只保存了子圖類點實體,而沒有被保存的注釋類點實體,故注釋類點實體的渲染信息保存成圖層文件。
GIS數據轉換系統框架如圖1所示。

圖1 系統框架Fig.1 System framework
使用MapGIS提供的SDK以及ArcGIS提供的Objects和COM組件,運用VC++語言對MapGIS數據源進行讀取,以及對ArcGIS平臺下文件進行寫入和保存;再運用C#語言讀取Access數據庫,并使用GDI函數符號化地質符號。
通過MapGIS軟件自身提供的功能,將地質符號庫轉換為 XML文件,通過 Dom4j解析器解析XML文件地質符號系統庫[6],并將解析數據存儲在Access數據庫中對應的SubGrapeb表、Line表及Reg表中。此XML文件中數據包括點符號、線符號和面符號,但是不含有顏色庫,因此顏色庫中的顏色信息是通過_GetAColorRGBValue()函數得到MapGIS顏色號對應的RGB值,并存儲在Access數據庫中的color表中。
ArcGIS繪制新的符號要實現Symbol類,故要實現相應的ISymbol接口、IPersist接口、IPersiststream接口和IClone接口,所有的地學符號都必須繼承以上4個接口并在此基礎上進行開發。ArcGIS平臺下提供了 PictureMarkerSymbol接口和 MultiLayer-MarkerSymbol接口用于繪制MapGIS下的地質點符號,但是也有很多在MapGIS下不能繪制的符號,ArcGIS提供了對其可以擴展的接口。本文選擇自定義的 MarkerSymbol[7],LineSymbol[8]和 FillSymbol類實現ISymbol接口來繪制,繪制方法主要運用GDI函數進行。
地質點符號[9-10]轉換如圖2所示,其中包含有子圖的大小、角度及子圖號等信息。

圖2-1 點符號轉換對照Fig.2-1 Comparsion of point symbol conversion

圖2-2 點符號轉換對照Fig.2-2 Comparsion of point symbol conversion
1)通過MapGISSDK提供的API調用相應的函數,創建相應類型的shapefile文件,并讀入MapGIS數據文件數據。
2)將讀取的空間信息、屬性信息數據存儲在新建的shapefile中。shapefile中包含空間信息文件(.shp)、屬性信息文件(.dbf)和索引文件(.shx)。
3)根據要轉換數據文件的類型,來調用相應的函數,生成相對應的渲染文件并保存在工程文件MXD中,但是注釋文件的渲染信息則保存在圖層文件(.lyr)中。
3.1.1 點文件轉換
MapGIS點文件進行轉換,要獲取到點文件的空間信息和屬性信息。轉換后會生成相應的shapefile文件以及相應的MXD文件。首先讀取點文件中圖元的個數以及屬性;其次判斷點類型,如果是注釋類點實體會被直接刪除并壓縮存盤,否則會把子圖類點實體的具體屬性寫入shapefile文件中;最后創建一個工程文件(.mxd),根據ID號來索引出shapefile文件中相應的字段對每個點實體渲染,保存在MXD文件中。點文件中點坐標獲取代碼為:

3.1.2 線文件轉換
線文件的轉換類似于點文件轉換。進行Map-GIS線文件轉換,先要獲取線文件的空間和屬性信息以及點文件的空間坐標信息;轉換后會生成相應的shapefile文件以及相應的MXD文件。不同的是線坐標點信息(x,y)寫入的方式,由于線文件是由點文件組成的,Point是指連續線每個線段端點的x和y坐標,所以線文件轉換時先要獲取線文件中起始點和終止點的坐標,然后創建一個Line對象,并設置Line對象的起始與終止點;再創建一個Path對象,通過ISegmentCollection接口為Path對象添加Segment對象;最后創建一個 Polyline對象,通過IGeometryCollection為Polyline對象添加Path對象。部分代碼如下:
(一)課前預習實驗“翻轉課堂”的關鍵在于找到一個好抓手,而設計好“自主學習卡”,就是破解“翻轉課堂”難題的好抓手之一。自主學習卡可以包含學習指南、學習任務、問題設計、學習資源和學習測試等項內容,是學生上課前的指路燈。教師根據學生已有的知識和新知識所需的銜接知識點設計制作微課,讓學生觀看微視頻,利用自主學習卡進行預習,為新課做好準備,這樣往往能事半功倍。

3.1.3 面文件轉換
MapGIS面文件進行轉換,要獲取面文件的空間信息和屬性信息以及線文件和點文件的坐標信息。轉換后會生成相應的shapefile文件以及相應的MXD文件。面符號轉換過程與線文件轉換過程類似,面文件是分別由點文件以及線文件組成,Point是指多邊形每個頂角的x和y坐標;區別在于面坐標點信息(x,y)寫入的方式,當線方向為正方向時,坐標點的信息是從起點到終點;當線方向為逆方向時,坐標點的信息是從終點到起點,這樣就可以圍成一個封閉的區域,即由多條邊圍成的一個閉合的路徑形成的一個面。
當面文件中線方向為正方向時的實現代碼為:

當面文件中線方向為逆方向時實現代碼為:

3.1.4 注記文件轉換
注記文件的轉換類似于點文件的轉換,不同的是注釋類會刪除子圖類,并生成注釋類圖層文件(.lyr)的寫入方式。下面是生成.lyr文件的注釋點實體VC代碼描述:首先,創建一個LayerFile對象,并創建一個空白圖層文件;然后創建一個FeatureLayer對象,將為其添加渲染數據源,即生成的shapefile文件;最后創建Layer對象和GeoFeatureLayer對象,將渲染后的Layer對象替換空白的LayerFile對象。部分實現代碼如下:


注釋類文件[11-12]中有些特殊注記內容需要處理,如上下標(圖中紅色標注處),傾斜等等。處理后點注記的DBF文件如圖3所示,圖中Expression字段包含顏色、字體、大小、注記內容、上下標、空格、橫豎方向、是否透明等渲染信息。

圖3 點文件中注記類的DBF文件Fig.3 DBF file of annotate class file in point file
MapGIS工程文件(.mpj)包含所有MapGIS文件的渲染信息和屬性信息,工程文件包含點文件(.wt)、線文件(.wl)和面文件(.wp)。轉換時,首先根據_PRJGetItemType()函數獲取到文件的類型來判斷圖層文件是點文件、線文件還是面文件。
如果是點文件的話,要利用PNTINFO.type來讀取點符號的類型:子圖類型(PNT_SUB)和注記類型(PNT_NOTE)。本文采用的方式是將子圖類實體和注記類實體分別存儲在不同的圖層文件中,即一個點文件如果包含子圖和注記,會生成2個渲染圖層文件。子圖類型點實體轉換操作為:首先判斷點文件中的點實體類型,如果存在注記類型點實體,就調用_DelPnt()函數刪除,并壓縮存盤;然后調用相應點文件轉換函數ArcGISConvertPoint()生成相應的shapefile文件;最后將渲染好的圖層信息加載到工程文件MXD中。注記類型點實體轉換操作為:首先判斷點文件中的點實體類型,如果存在子圖類型點實體,就調用_DelPnt()函數刪除,并壓縮存盤;然后調用相應點文件轉換函數ArcGISConvertAnnotate()生成相應的shapefile文件;最后將渲染好的圖層信息加載到圖層文件(.lyr)中。
如果是線文件的話,直接調用相應線文件轉換函數ArcGIS ConvertLine()生成相應的shapefile文件,將渲染好的圖層加載到工程文件(.mxd)中。
如果是面文件的話,直接調用相應面文件轉換函數ArcGIS ConvertReg()生成相應的Shapefile文件,將渲染好的圖層加載到工程文件(.mxd)中。
MapGIS文件轉換成ArcGIS文件時,所有文件都會轉換到shapefile文件中保存,對shapefile文件進行渲染后,點文件、線文件和面文件會進一步保存為MXD文件,而點文件中注釋類點實體會轉換成圖層文件(.lyr)保存。
本文以廣西某縣的水文圖作為轉換數據源,驗證轉換的正確性。轉換結果如圖4所示。

圖4 從M apGIS轉換到ArcGIS的效果對比Fig.4 Effect figure of com parison of conversion from M apGIS to ArcGIS
廣西壯族自治區容縣水文圖中裁剪的部分經過文件轉換后,分2種情況:①轉換中注記文件和顏色使用默認值渲染;②轉換中使用注記文件轉換以及顏色使用CMYK向RGB轉換的顏色值渲染。本文提供的地圖數據文件轉換方式基本實現了點、線、面和工程文件的轉換,但是存在注記、顏色以及符號等渲染信息丟失;通過對比可以明顯看出,標注、顏色及圖層都基本正確,但點、線、面符號有明顯丟失,而渲染圖層是用ArcGIS提供默認的點、線、面符號,因此本文第二節地質符號轉換將MapGIS平臺下使用的符號庫遷移到ArcGIS平臺下,從而可以使原來相應的符號在轉換過程中渲染相對應的圖層,所以在轉換后的圖形文件中應用轉換后的符號。通過對比圖2和圖4可知,本研究成果基本無損地實現了將地理圖形數據從MapGIS平臺遷移到ArcGIS平臺下,并且幾乎沒有丟失注記、顏色和符號等信息。
本研究開發的軟件的穩定性以及實用性已在實際應用中得到驗證,達到了預期的效果,但仍存在一些不足。如系統并不是一個涵蓋國標符號的符號庫,仍然是一個局部使用的符號庫。今后將會在研發跨平臺的數據庫管理系統方面開展深入研究,實現符號庫脫離GIS平臺的束縛,以達到真正意義上的跨平臺數據共享。
1)本文的方案實現了原有MapGIS數據到Arc-GIS平臺的準確轉換,保證數據和符號的真實性。在使用習慣沿襲和先進管理平臺的優越性能2方面獲得了雙重收益。
2)針對不同GIS平臺不能進行數據共享的難題,實現了一個通用的標準繪圖地學符號管理數據庫,并將此符號庫系統封裝成一個標準的動態鏈接庫,可以注冊到任何標準的GIS平臺中,以此來解決ArcGIS提供的符號不能滿足MapGIS下所有符號的需求,從而使MapGIS到ArcGIS平臺下地學圖件數據的完美轉換得以實現。
3)針對轉換過程中文件的空間屬性(坐標信息)、屬性信息、顏色不一致的問題,通過參數賦屬性的方式進行解決,從而避免了轉換時屬性丟失的現象。
4)專題數據庫中系統庫數量多且復雜,大多數系統庫存在一圖一庫的現象,手工實現MapGIS符號庫到ArcGIS符號庫的轉換需要耗費大量的人力、物力,故地學符號庫轉換系統將MapGIS平臺下的Slib系統庫轉換成ArcGIS平臺下支持的Style符號庫,很好地解決了專題數據轉換問題。
[1] 任志遠.MapGIS到ArcGIS數據轉換方法的分析研究[J].蘇州科技學院學報:自然科學版,2009,26(3):77-80.Ren Z Y.Data conversion from MapGIS to ArcGIS[J].Journal of Suzhou University of Science and Technology:Natural Science,2009,26(3):77-80.
[2] 彭晶晶,戴愛德.MapGIS數據向ArcGIS轉換研究[J].國土資源信息化,2008(1):19-25.Peng JJ,Dai A D.Data conversion from MapGIS to ArcGIS[J].Land and Resources Information,2008(1):19-25.
[3] 黃 云.MapGIS向ArcGIS數據格式轉換方法探討[J].地礦測繪,2010,26(1):33-35.Huang Y.Data format conversion methods form MapGIS to ArcGIS[J].Surveying and Mapping of Geology and Mineral Resources,2010,26(1):33-35.
[4] 馬建芳.全矢量地質符號庫的設計與實現[D].北京:中國地質大學,2013.Ma J F.Design and Implementation of Full- vector Geological Symbol Database[D].Beijing:China University of Geosciences,2013.
[5] 范曉明.跨GIS平臺數據格式與地圖符號轉換[D].北京:中國地質大學,2009.Fan X M.The Conversion of File Formats and Symbol Library Access GIS Platform[D].Beijing:China University of Geosciences,2009.
[6] Zhou Y,Wu X Q,Wang R Y.A semantic similarity retrievalmodel based on Lucene[C]//2014 5th IEEE International Conference on Software Engineering and Service Science(ICSESS 2014).Beijing:IEEE,2014:854-858.
[7] ESRI.Logomarker symbol example[EB/OL].[2014- 06- 09].http://resources.esri.com/help/9.3/ArcGIS desktop/com/COM/ExtendAO/LogoMarkerSymbol.htm.
[8] 孫 林,王艷慧.基于ArcGIS的1∶250 000國標地形圖符號制作[J].測繪與空間地理信息,2014,37(1):66-68.Sun L,Wang Y H.National standard of 1∶250 000 topographic map symbols based on ArcGIS[J].Geomatics and Spatial Information Technology,2014,37(1):66-68.
[9] 許 暉.MapGIS到ArcGIS地質災害數據符號的正確表達關鍵技術研究[J].測繪技術裝備,2013,15(4):17-19.Xu H.Key technology research MapGIS to geological disasters Arc-GIS data symbols correctly expressed[J].Geomatics Technology and Equipment,2013,15(4):17-19.
[10] 詹 昊,高金平,張云姣.MapGIS到ArcGIS數據格式轉換關鍵技術研究[J].測繪通報,2012(s1):553-554.Zhan H,Gao JP,Zhang Y J.MapGIS to ArcGIS data format conversion key technology research[J].Bulletin of Surveying and Mapping,2012(s1):553-554.
[11] 李敬敏.面向對象的地圖注記庫設計與實現[D].北京:中國地質大學,2010.Li JM.The Design and Implementation ofObject-Oriented Annotation Database[D].Beijing:China University of Geosciences,2010.
[12]萬里飛.空間要素渲染的插件化研究與實現[D].北京:中國地質大學,2012.Wan L F.The Plug-in Interface Research and Realization of Geospatial Feature Rendering[D].Beijing:China University of Geosciences,2012.