于艷超,許捍衛(wèi),杜嬋娟
(1.河海大學 地球科學與工程學院,江蘇 南京 210098;
2.河南省地質礦產勘查開發(fā)局 第四地質礦產調查院,河南 商丘 476000)
基于DWGDirect的CAD到GIS數據轉換研究
于艷超1,許捍衛(wèi)1,杜嬋娟2
(1.河海大學 地球科學與工程學院,江蘇 南京 210098;
2.河南省地質礦產勘查開發(fā)局 第四地質礦產調查院,河南 商丘 476000)
針對CAD數據到GIS數據的轉換中大量存在的信息缺失、效率低下、更新困難等諸多問題,提出基于DWGDirect類庫,結合ArcEngine實現CAD數據到GIS數據的轉換,很大程度上解決了上述各種問題,確保了數據轉換的科學性和高效性。
DWGDirect;OpenDWG;CAD;GIS;AE;數據轉換
數據的采集和獲取是GIS建設的基礎工作。為了計算機輔助繪圖的方便,我國測繪部門常使用諸如CAD 之類的繪圖軟件制作DLG[1,2],使得數據的維護、更新變得極其不便。張葉等論述了城市基礎CAD到GIS數據轉換的一些問題,并介紹了基于Geoway進行數據轉換的方法,但存在編碼不規(guī)范、構面工作量大等問題[3];任東風等通過AO+VB設計了數據轉換程序,實現AutoCAD 環(huán)境下的大比例尺地形圖數據向GIS 數據格式的轉換[4];李金朋等通過插件式GIS實現CAD數據到GIS數據的轉換[5]。基于上述研究,本文采用DWGDirect 類庫,成功地解決了2種數據模型之間的無損轉換。
傳統(tǒng)的CAD模型設計的目的是方便制圖,它往往只注重圖面效果,而忽略要素屬性信息,且只以文件形式存儲。而GIS數據模型設計的目的主要是為了數據分析和挖掘等,能同時兼顧圖形和屬性信息的表達,它不僅支持文件存儲,而且可以依賴關系數據庫模型而存儲。CAD處理的多為規(guī)則圖形,而GIS多為非規(guī)則圖形。CAD圖形功能強而屬性處理能力弱,而GIS圖形與屬性操作比較頻繁,且專業(yè)化特征比較強,CAD則不具備地理意義上的查詢和分析能力[6]。
1.1 CAD數據模型
以DWG為后綴的圖形文件是由CAD生成的一種二進制文件,包括Header、Entities、Tables、Blocks和Contingency Header,分別是頭部、實體部、表部、塊實體部以及應急頭部。Entities中存儲的是該DWG中的全部Entity,Entity頭部長度是一定的,而且對每一個Entity都是相同的;而Entity尾部,CAD公司為了節(jié)省資源,采用了極為緊湊的格式,它描述了Entity的主要集合參數。
CAD圖形是一些對象的集合,這些對象存儲在數據庫(AcDbDatabase)中,實體、符號表和數據詞典是數據庫中最基本的對象。AcDbDatabase中的所有圖形元素均被稱為實體(Entity),每一種實體都被系統(tǒng)賦予唯一的類型名稱,通過訪問CAD實體,我們可以把外部信息附加到文件中,這是簡化復雜制圖工作的一種最有效的途徑。AcDbDatabase中所有實體的關系如圖1所示。
圖1 AcDbDatabase中實體的關系
1.2 Geodatabase模型
Geodatabase是一種對象-關系數據模型,通過面向對象的數據建模方法能夠更自然地描述要素,自行定義對象類型,定義拓撲、空間和一般關系,以及掌握這些對象如何與其他對象發(fā)生交互作用。優(yōu)點:空間數據統(tǒng)一存儲、空間數據錄入和編輯更加精確、用戶操作更直觀、要素擁有更豐富的背景信息、可以制作更優(yōu)質的地圖、動態(tài)顯示地圖上的要素、定義了更好的要素外形、要素集是連續(xù)的、多用戶同時編輯地理數據等。
Geodatabase數據模型包含3種空間數據表達方式:用矢量數據表達離散的空間要素;用柵格數據表達影像、格網化專題數據、曲面;用不規(guī)則三角網(TIN)表達曲面。Geodatabase按照一定的模型和規(guī)則組合空間要素數據集(Feature Dataset),它按層次型的數據對象(Object)來組織空間數據,這些數據對象包括:對象類、要素類、要素數據集和關系類等。Geodatabase層次結構如圖2所示。
圖2 Geodatabase層次結構
1.3 CAD與GIS數據圖形對照
CAD與GIS數據之間的區(qū)別主要體現在對圖元表達的不同[7],CAD圖元主要分為塊、文本、線、圓弧等;而GIS則分為點、線、面和文本等。以點狀地物為例,CAD會用各種符號和注記來表示地理實物,注重地物的視覺表達,并且符號的制作也具有靈活性,但是不注重對拓撲關系的反映;而GIS數據在表示點狀地物時必須進行符號化(表1)。
表1 CAD圖形與GIS圖形對照表
2.1 DWGDirect簡介
DWGDirect類庫是一套完全面向對象的類庫。該類庫支持CAD的眾多版本,能夠直接讀取DWG文件以獲取數據信息,并且具有較高的效率和安全性。DWGDirect類庫包括:
1)OdRx類:在運行時對類進行注冊和識別;
2)OdDb類:表示AcDbDatabase中的所有Entities數據;
3)OdGi類:用來實現對數據對象進行渲染;
4)OdGe類:一種通用幾何類(像點、線、面);
5)OdBr類:該類主要用于B-Rep;
6)OdGs類:是一種圖形系統(tǒng)類,用來為用戶提供矢量化。
在DWGDirect類庫中,一個DWG文件在內存中實際上就是一個OdDbDatabase類的實例。每個實例代表一個數據庫,它是一些實體對象的集合,包括9個符號表和1個對象字典: UCS、Text Style、Layer、Line Type、View Port、RegApp、Block等和Object字典。其中每個表和字典中均包含很多記錄,像Block Table中包含多條Block Table Record 記錄,點、線、圓等Entities數據都包含在Block Table Record 中。根據此OdDbDatabase數據庫結構,利用對應的類庫函數,就可方便地訪問到CAD文件中的Entities數據等信息[8]。
2.2 Windows平臺配置
在Windows OS下DWGDirect類庫提供單線程的靜態(tài)鏈接庫(DD-vc6ML)、多線程的靜態(tài)鏈接庫(DD-vc6MT)、靜態(tài)多線程的DLL庫(DD-vc6MD)和動態(tài)鏈接庫(DD-vc6)等。在Windows OS下所需要的頭文件都包含在DD_NonLibs.zip中,使用時選擇正確的類庫頭文件和靜態(tài)動態(tài)鏈接庫,并在項目中添加引用即可。
對于經過數據預處理的本地CAD數據,通過數據轉換、數據分層、數據后處理等操作,完成CAD數據的轉換入庫(圖3)。
圖3 CAD數據轉換入庫流程圖
3.1 數據預處理
1)數據預處理。在進行轉換前,首先應對其進行簡單預處理,以減少轉換過程中不必要的錯誤,預處理在AutoCAD中進行即可:確定所有圖層是否處于打開狀態(tài),是否未凍結,是否未鎖定;清除廢塊,刪除重復要素,檢查是否存在未封閉的多邊形等。
2)配置表設計。為了滿足不同用戶的需求和項目應用的變化,設計使用Microsoft Access數據庫作為系統(tǒng)配置表。對轉換過程中涉及到的基本屬性、擴展屬性、數據庫圖層、字段、分層對照關系以及轉化進程和錯誤信息的日志等進行配置。
3.2 數據轉換
數據轉換主要是把CAD中的實體數據,按照表 1對應的幾何類型分為點、線、面、注記4層,并保存其屬性信息,最后存儲到臨時Geodatabase中,設為GB1。
1)創(chuàng)建臨時數據庫:CAD通常采用幾何坐標系,而GIS則采用地理坐標系,因此在創(chuàng)建數據庫時,可以讀入GIS自帶的或自定義的坐標系文件。創(chuàng)建點線面注記層時,可以在配置表中設定其需創(chuàng)建的字段。
2)屬性信息獲取:屬性信息包括基本屬性和擴展屬性。分別封裝2個類:MyData和MyXData。在事務處理中,通過類的實例,將屬性信息賦給要素?;緦傩?,例如Name、Line Type、Code、Layer Name等按照需要選擇保留;對于擴展屬性,利用各實體句柄與圖形建立關聯,也讀取出來,實現圖形數據與屬性信息的對應關系,為第三步的數據分層作好掛接。
3)數據轉換:按照圖1所示CAD數據模型,基于DWGDirect類庫,創(chuàng)建實例和事務處理過程,遍歷Block Table Record,獲取其實體數據,按照表1所示對照關系,進行CAD數據到GIS數據的轉換,最終將數據保存到點、線、面、注記4個層中。
3.3 數據分層
CAD數據依據層名Layer Name來區(qū)分各個層,數據轉換結束后Layer Name作為基本屬性存儲在GB1中,可以據此來作為分層的依據。
1)配置分層表:建立CAD圖層名到GIS要素(點線面注記)之間的分層對照表,該表至少包括CAD圖層名,GIS點、線、面、注記層名5個字段。
2)創(chuàng)建分層數據庫:通過對客戶需求進行詳細分析,設計標準配置表:入庫圖層(圖層名和幾何類型)、圖層字段對應關系(圖層名和字段名)、字段列表。通過這些對照關系,建立分層數據庫,進行分層。
3)數據分層:讀取GB1,對其要素進行遍歷,按照分層表進行分層。另外,由于實際情況往往比較復雜,可能需要根據一些屬性編碼和塊名來進行分層。例如,如果CAD數據中提供諸如CASS碼之類的信息時,我們可以在配置表中建立CASS和國標碼之間的對照關系,并依此進行分層。
3.4 數據后處理
在數據入庫之前,需要對數據進行檢查,杜絕可能對建庫造成影響的因素(例如接邊,拓撲錯誤等)。根據檢查結果作相應處理:對于道路、房屋線等重要要素進行接邊處理,確保要素的完備性;對房屋線等進行構面,找到共用邊線的地方,對這些要素進行拓撲分析并參考構面點進行拓撲構面;對面狀要素,進行面狀修復。
安徽省某市測繪院通過上述技術,將DWG數據文件的地形圖文件轉換入庫,從而建立GIS地形數據庫,為城市規(guī)劃、管理和建設提供GIS數據支持與服務。該方法不僅能夠繼續(xù)沿用原有的生產習慣和作業(yè)方式,而且有效地避免了培訓學習和重復作業(yè)造成的巨額成本。同時,可以解決其他部門和業(yè)務環(huán)節(jié)對空間數據的需求,可以最大限度地利用GIS在空間數據管理和共享中的能力。
[1] 王波,張亮,孫霞.CAD向GIS數據的轉換入庫[J].地理空間信息,2011,9(3):24-26
[2] 李淑清.地形圖與Geodatabase轉換的探討[J].地理空間信息,2010,8(2):26-28
[3] 張葉,孫毅中,陳年松.CAD城市基礎數據到GIS轉換的有關問題探討[J].測繪與空間地理信息,2007,30(1):94-97
[4] 任東風,徐立軍,才藝.CAD到ArcGIS數據轉換問題[J].遼寧工程技術大學學報:自然科學版,2010(增刊):25-27
[5] 李金朋,劉化冰,李新雙.基于插件式GIS實現CAD數據到GIS數據的轉換[J].測繪,2011,34(4):168-170
[6] 周小成,焦道振.基于Geodatabase的CAD數據到GIS的解決方案[J].四川測繪,2005,28(2):74-77
[7] 孔毅,張志強,趙崇亮.基于ArcGIS的CAD數據入庫研究[J].測繪通報,2010(5):54-56
[8] 晏韻,許超.基于DWGDirect訪問AutoCADDWG圖形文件[J].工程圖學學報,2010(6):178-181
P208
B
1672-4623(2015)01-0084-03
10.3969/j.issn.1672-4623.2015.01.028
于艷超,碩士,主要從事GIS開發(fā)與應用工作。
2014-01-03。
項目來源:國家自然科學基金資助項目(41101374、41101308)。