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