周義軍,劉小飛,舒濱,劉宓
(天津市測繪院,天津 300381)
隨著地理信息行業的蓬勃發展,市場對GIS數據的需求越來越大,而現有的測繪成果大多以CAD數據為主。為了充分利用現有的數字化成果,CAD數據到GIS數據的轉換成為行業內必須面對和解決的問題。現有的CAD到GIS數據轉換大體可分為兩種方式,一是利用現有的軟件所提供的轉換功能進行格式轉換,此種轉換大多只能達到數據顯示的需要,往往要對轉換后的結果進行一系列人工處理,才能達到實際應用的要求;另一種轉換方式是基于現有的軟件提供的二次開發組件,結合實際要求進行二次開發,達到無損轉換的要求。本文采用第二種方式,提出了一種基于規則和模板的CAD到GIS數據轉換的解決方案,實現了GIS數據的自動、無損轉換,并具有一定的兼容性。
由于數據組織模型的不同,CAD數據和GIS數據在數據組織、表達和應用等方面都不盡相同,轉換過程中很難將數據承載的信息一一對應過去。目前,很多的轉換方法都或多或少的存在一些問題:
(1)由于CAD軟件和GIS軟件對圖形實體的數據結構定義不一致,轉換過程中造成要素丟失和要素變形。
(2)由于CAD軟件很少考慮地理要素的拓撲關系,在轉換過程中,CAD數據的誤差和錯誤完全被傳遞到GIS數據上。
(3)CAD軟件對符號的表達不夠規范,在轉換過程中很難將符號信息剔除出去,造成大量數據冗余。
(4)針對數據轉換沒有一個詳盡適用的統一標準,這就導致轉換程序很難達到兼容性。
我們針對上述幾點問題,設計出一種基于規則的CAD數據到GIS數據的轉換程序。首先,針對兩種數據的數據結構,設計出一種合理的轉換規則——對照表,其次,對應于轉換規則,人為設定GIS數據模板。對照表和GIS數據模板可以人為的進行控制,同時修改它們可以動態調整和改變轉換結果。基于ArcGIS Engine組件和CAD二次開發組件實現了CAD數據到GIS數據的無損轉換,并詳細敘述了程序的設計原理和實施步驟。目前,此應用程序已經應用到實際工作當中,通過了時間的檢查,達到了預期的目標。
按照圖形的幾何特征,空間數據可分為點、線、面和注記4種地理要素。CAD數據到GIS數據轉換的實質就是這4種地理要素間的轉換,轉換過程可細分為4種地理要素的幾何數據和屬性數據的讀取,組織和寫入過程。按照此種思路,本文采用模塊化的設計理念對轉換功能進行了詳細設計。如圖1所示,數據轉換功能大體可分為以下幾個部分:轉換規則和GIS數據模板設計,數據讀取,錯誤處理,數據寫入以及后續處理。

圖1 轉化功能流程圖
(1)轉換規則
轉換規則是所有編碼的地理要素都要遵循的轉換原則,具有兼容性和可擴展性,本文設定的轉換規則如下:
Rule={FeatureCode,FeatureName,Shape,GISLayer,YesOrNo,Attributes}
其中FeatureCode為此類要素的編碼,此編碼具有唯一性,亦適合于GIS數據。
FeatureName表示此類地理要素的中文名稱,無名稱的可置為空。
Shape表示此類要素的幾何類型,要素按照圖形的表達方式可分為,點,線,面和注記四種類型。
GISLayer表示在ArcGIS數據中此類要素所屬的要素層。
YesOrNo表示此類編碼的要素是否需要轉換,需要轉換為Yes,不需要轉換為NO。
Attributes表示此類編碼的要素應具有的屬性要素的名稱集合。
本文將具體的規則以行的形式存儲在Access數據庫的表中,以供程序讀取和使用。
(2)數據模板
數據模板的實質是GIS數據格式的文件,其結構是根據對照表中的具體信息進行設計的。本文設計的數據模板采用ArcGIS的個人數據庫格式(*.mdb),依照轉換規則中的具體的GISLayer的名稱和類別建立FeatureClass,每個FeatureClass的屬性結構對應于對照表中所有具有相同GISLayer規則的Attributs的并集。
由此可見,對照表和GIS數據模板又是相互聯系的,其中一個修改,另一個也需要做相應的修改。這種聯系在CAD數據和GIS數據之間搭起了一座橋梁,為CAD到GIS數據轉換開辟了一條可行之路。
(1)數據讀取
數據讀取是轉換的開始,依據轉換規則,讀取CAD數據,作為數據寫入的基礎。此過程可分為圖形數據的讀取和屬性數據的讀取。AutoCAD按照圖層來組織數據,按編碼分類地理要素,圖形數據讀取以圖層為單元,遍歷圖層中的所有圖元,得到每個圖元的編碼,并通過對照表確定各個圖元的有效性和正確性;屬性數據讀取以相應的圖元為基礎,依據對照表中相應編碼的屬性集合(Attributes)讀取圖元的屬性信息,并確定屬性的正確性和邏輯一致性。最后,將圖形信息和屬性信息以ArcGIS數據結構進行組織,為數據寫入做好準備。
(2)錯誤處理
錯誤處理具有發現、定位和輸出錯誤的功能,它依附于數據讀取,貫穿于數據讀取的全過程。在圖形和屬性數據讀取的過程中,程序對不符合轉換規則的圖形要素進行標記和定位,同時輸出錯誤報告。如:面的多段線不閉合、對照表中沒有此編碼、其擴展屬性與對照表中屬性不完全對應等等。
數據讀取是數據轉換的開始,也是基礎,錯誤處理保證了數據的正確性、完整性和邏輯一致性。另外,對于CAD數據中圓和圓弧的處理,本文采用了一種與眾不同的做法。和一般的轉換程序采取弧段加密的方式不同,本文利用ArcGIS的圓和復雜曲線的數據結構,將CAD數據中的圓和圓弧一一對應到GIS數據中的圓和復雜曲線,實現了轉換過程中數據無損失,圖形要素無變形。
(1)數據寫入
數據寫入實質就是GIS數據的生成過程,將數據讀取后的信息按照一定的規則寫入到事先復制好的GIS數據模板(*.mdb)中。數據寫入以層為單元,逐條寫入。另外,考慮到大數據量的問題,本文利用C#語言的事件觸發機制將數據進行分段讀取和寫入,避免了程序占用內存較大導致系統內存不足的錯誤。
(2)后續處理
后續處理主要是進行島嶼處理以達到GIS數據的最終要求。島嶼處理可分為同層島嶼處理和異層面相減處理。同層島嶼處理過程中,本文參考ArcGIS數據結構中的復雜面的設定,為同面島嶼處理設定出“奇刪偶不刪”的原則,即刪除被包含奇數次的多邊形,保留被包含偶數次的多邊形,如圖2所示,其中“被包含”定義為圖形被包含著并且屬性相同,異層面相減處理,可以按層進行操作,確保地物無壓蓋,如植被層與道路層應無壓蓋等。

圖2 同面島嶼處理規則圖
本文采用C#.net+ArcGIS Engine 9.2技術開發轉換程序,對照表在Access數據庫中以表的形式存在,轉換生成ArcGIS的個人數據庫(GeoDatabase)成果。本文所編寫的數據轉換程序已經應用于天津市測繪院的1∶2 000比例尺地形圖的GIS數據的生產實踐中,取得了良好的效果,確保了數據的質量,大大提高了GIS數據生產的效率。另外,值得一提的是,此種設計具有一定的兼容性,操作員可以通過修改對照表和GIS數據模板控制轉換過程,適用于大多數CAD數據。
[1]李嬌嬌.基于ArcGIS的CAD到GIS數據轉換[J].交通科技與經濟,2009(3):110~113
[2]周小成,焦道振.基于GeodataBase的CAD數據到GIS的解決方案[J].測繪與空間地理信息,2005(2):128~133
[3]韓勇,陳戈.基于CAD數據建立GIS文本數據庫方法的探討[J].測繪通報,2004(1):1~3
[4]張葉,孫毅中,陳年松.CAD城市基礎數據到GIS轉換的有關問題探討[J].測繪與空間地理信息,2007(2):50~52
[5]文學東,鐘文軍,祝方雄等.基于Geodatabase的CAD到ARCGIS數據入庫研究[J].測繪科學,2006(6):64~66
[6]李東軍.CAD到ArcGIS的數據自定義轉換探討[J].江西測繪,2007(1):23~25