劉陽,劉允,劉宓,楊釗
(天津市測繪院,天津 300381)
隨著國家基本比例尺地圖圖式和國家基礎(chǔ)地理信息要素數(shù)據(jù)字典的頒布實(shí)施,天津市測繪院的數(shù)據(jù)標(biāo)準(zhǔn)也進(jìn)行了革新和完善。當(dāng)前GIS事業(yè)的迅速發(fā)展,對數(shù)據(jù)的標(biāo)準(zhǔn)化、信息化要求逐步提高,對GIS數(shù)據(jù)的現(xiàn)勢性要求日益增加,因此若能實(shí)現(xiàn)CAD數(shù)據(jù)向GIS數(shù)據(jù)的自動轉(zhuǎn)換,對基礎(chǔ)地理信息產(chǎn)業(yè)建設(shè)會有相當(dāng)深遠(yuǎn)的影響。
多年來,從CAD數(shù)據(jù)到GIS數(shù)據(jù)的快速轉(zhuǎn)換一直是我們探索的目標(biāo),而此次研究的方向鎖定在從DWG格式數(shù)據(jù)直接輸出MIF格式數(shù)據(jù),再轉(zhuǎn)換為TAB格式數(shù)據(jù)的轉(zhuǎn)換思路上。轉(zhuǎn)換的整體技術(shù)思路設(shè)計(jì)如下:
以DWG格式數(shù)據(jù)為源數(shù)據(jù),按照數(shù)據(jù)標(biāo)準(zhǔn)對GIS數(shù)據(jù)的要求,從數(shù)據(jù)中直接讀取各個要素的骨架數(shù)據(jù),將其直接輸出MIF格式數(shù)據(jù),通過MapInfo軟件的轉(zhuǎn)入表功能,直接將MIF格式數(shù)據(jù)轉(zhuǎn)為TAB格式的GIS數(shù)據(jù),數(shù)據(jù)的分層、屬性、關(guān)聯(lián)等信息要完全符合標(biāo)準(zhǔn)。
MIF格式數(shù)據(jù)包括兩部分,MIF和MID兩個文件,MIF文件的內(nèi)容主要是點(diǎn)(point)、線(pline)、面(regen)等要素的位置記錄和樣式信息,還包括整個圖面的坐標(biāo)范圍、屬性字段的個數(shù)名稱和類型;MID文件的內(nèi)容就是輸出的各個地物要素的屬性內(nèi)容。
圖1 mif文件格式
圖2 mid文件格式
根據(jù)天津市測繪院現(xiàn)行的數(shù)據(jù)標(biāo)準(zhǔn),地物要素總共分為8個大類,包括控制點(diǎn)(KZD)、水系(SX)、居民地及設(shè)施(JMDSS)、交通(JT)、管線(GX)、境界(JJ)、地貌(DM)、植被與土質(zhì)(ZBTZ)。轉(zhuǎn)換后的GIS數(shù)據(jù)基本按照這8個大類劃分,在此基礎(chǔ)上添加了交通中心線(DLZXX)、水系中心線(SXZXX)兩層數(shù)據(jù)。
①GIS數(shù)據(jù)指專業(yè)或通用地理信息系統(tǒng)中有分析價值的地理信息數(shù)據(jù),即能夠表達(dá)地物位置和形狀的、有屬性信息的點(diǎn)、線、面等。在DWG數(shù)據(jù)中表現(xiàn)為地物的骨架數(shù)據(jù)及其對應(yīng)的屬性信息。如圖3,灌木行樹的骨架線、棚房的閉合邊線、依比例尺的涵洞框架線。作為各要素相應(yīng)的骨架數(shù)據(jù),需要轉(zhuǎn)換成GIS數(shù)據(jù)。灌木行樹為線狀數(shù)據(jù),棚房和依比例尺的涵洞為面狀數(shù)據(jù)。
圖3 骨架數(shù)據(jù)示意圖
②為了保證GIS數(shù)據(jù)的使用效果,在程序設(shè)計(jì)中也考慮了GIS數(shù)據(jù)的符號化、美觀化。由于MIF格式在這方面的優(yōu)越性,我們可以直接將GIS數(shù)據(jù)各類要素的顏色、線型樣式等進(jìn)行設(shè)定,這樣最終得到的TAB數(shù)據(jù)就會有很好的表達(dá)效果。比如說給各種類型的房屋賦予不同的顏色,圍墻柵欄等樣式都可以直接在轉(zhuǎn)換時設(shè)定。
③新的數(shù)據(jù)標(biāo)準(zhǔn)要求每個地物要素都建立關(guān)聯(lián)關(guān)系。它是指為了表示組成一個實(shí)體的各個部分或若干實(shí)體為一個整體所建立的數(shù)據(jù)關(guān)系。包括要素內(nèi)部的關(guān)聯(lián)和要素之間的關(guān)聯(lián)。舉例來說,棚房邊線與棚角描述符之間的關(guān)聯(lián),為要素內(nèi)部的關(guān)聯(lián);單位點(diǎn)和單位注記之間的關(guān)聯(lián),為要素之間的關(guān)聯(lián)。利用要素的關(guān)聯(lián)關(guān)系,可以解決很多問題,如房屋天井、獨(dú)立的不依比例尺符號與范圍線內(nèi)部的不依比例尺符號的區(qū)分等情況。
④根據(jù)設(shè)計(jì)的要求,地物的關(guān)聯(lián)關(guān)系也要帶入GIS數(shù)據(jù)中。將關(guān)聯(lián)關(guān)系以屬性字段的形式記錄下來,在GIS數(shù)據(jù)中通過檢索查詢的方式即可實(shí)現(xiàn)對關(guān)聯(lián)地物的查詢和應(yīng)用。
根據(jù)數(shù)據(jù)字典的要求,CAD數(shù)據(jù)中每個地物都有不同的擴(kuò)展屬性。這些擴(kuò)展屬性是以Map_Info為擴(kuò)展名記錄下來的,其中每個組碼1 000對應(yīng)記錄一個屬性字段的內(nèi)容,但并沒有記錄下屬性字段的名稱,如圖4所示。GIS數(shù)據(jù)則是每一層地物有一個與之對應(yīng)的屬性表,包括該層地物涉及的所有屬性字段,每個地物的屬性字段名稱和內(nèi)容都會逐條記錄下來,如圖5所示。
圖4 CAD數(shù)據(jù)擴(kuò)展屬性
圖5 GIS數(shù)據(jù)擴(kuò)展屬性
從以上分析可以看出,兩種數(shù)據(jù)的屬性結(jié)構(gòu)有很大的差別。如何把每個地物的各項(xiàng)屬性內(nèi)容在GIS數(shù)據(jù)屬性表中與相應(yīng)的字段名稱一一對應(yīng)起來,就成為擴(kuò)展屬性轉(zhuǎn)換的關(guān)鍵。
為了解決這一問題,可將這種對應(yīng)關(guān)系體現(xiàn)在數(shù)據(jù)轉(zhuǎn)換的對照表文件中。根據(jù)GIS數(shù)據(jù)的要求,每一層要素都有相應(yīng)的屬性結(jié)構(gòu),將各層要素的屬性結(jié)構(gòu)整理成property.ini對照表,如圖6所示,在對照表中記錄各層要素的所有屬性字段名稱及其類型,并對每個屬性字段名稱進(jìn)行編號。針對每個地物要素不同的屬性,建立SystemAttributes.ini對照表,如圖7所示,在其中不但要記錄每個地物要素的屬性字段名稱,而且要記錄各項(xiàng)屬性名稱在GIS數(shù)據(jù)中對應(yīng)的字段編號,通過這個字段編號,程序就可以識別CAD數(shù)據(jù)中不同的屬性項(xiàng)對應(yīng)GIS數(shù)據(jù)屬性結(jié)構(gòu)中的哪一項(xiàng),即可在程序轉(zhuǎn)換中實(shí)現(xiàn)屬性的對應(yīng)轉(zhuǎn)換。
圖6 圖層的屬性對照格式
圖7 地物的屬性對照格式
數(shù)據(jù)中的關(guān)聯(lián)關(guān)系的運(yùn)用,將一些比較復(fù)雜的關(guān)鍵問題用關(guān)聯(lián)這種統(tǒng)一的思路和方法得到了解決。舉兩個例子介紹一下。
第一,獨(dú)立的不依比例尺符號和在范圍線內(nèi)部配置的不依比例尺符號的區(qū)分。在GIS數(shù)據(jù)中,范圍線內(nèi)部的符號并不需要,只有獨(dú)立的不依比例尺符號要保留。而CAD數(shù)據(jù)中,這兩種情況雖然圖面表達(dá)的意義不同,但圖面使用的符號編碼和塊名都是一樣的,無法進(jìn)行本質(zhì)上的區(qū)分。因此要得到正確的結(jié)果,比較好的方法就是對轉(zhuǎn)換后的GIS數(shù)據(jù)做拓?fù)浞治?,將落在范圍線內(nèi)部的符號刪除,只保留獨(dú)立的符號。這是一種間接實(shí)現(xiàn)的手段,需要借助GIS軟件的拓?fù)浞治龉δ軄硗瓿伞,F(xiàn)在有了關(guān)聯(lián)關(guān)系的運(yùn)用,這兩種情況下的不依比例尺符號就得到了很好的區(qū)分:不依比例尺的符號是否有與其相關(guān)聯(lián)的范圍線。根據(jù)以上的思路,在轉(zhuǎn)換程序中加入相關(guān)的判斷條件,就直接實(shí)現(xiàn)了不依比例尺符號的轉(zhuǎn)換。如圖8就包括了這兩種情況:范圍線內(nèi)部的配置不依比例尺符號的情況在GIS中轉(zhuǎn)為范圍線面狀要素,獨(dú)立的不依比例尺符號轉(zhuǎn)為點(diǎn)狀要素。
圖8 依/不依比例尺符號的CAD數(shù)據(jù)和GIS數(shù)據(jù)
第二,島狀地物的轉(zhuǎn)換。地形圖上要素相當(dāng)復(fù)雜,必然會出現(xiàn)島狀的表示情況。如圖9的池塘外圍斜坡面,就是用坡頂框架線和坡底框架線圍成的島狀面狀地物。如果沒有對斜坡的框架線建立關(guān)聯(lián)關(guān)系,那么GIS數(shù)據(jù)就會轉(zhuǎn)換成兩個重疊的面,必須對數(shù)據(jù)進(jìn)行挖島處理,才能得到符合標(biāo)準(zhǔn)的數(shù)據(jù)。現(xiàn)在內(nèi)外層框架線建立了關(guān)聯(lián)關(guān)系,可以根據(jù)關(guān)聯(lián)關(guān)系找到島狀地物的內(nèi)外層各條線,并根據(jù)面積的大小不同,確定出島狀地物的最外圍邊線和所有與之關(guān)聯(lián)的內(nèi)部島,這樣就能直接將這種島狀地物轉(zhuǎn)換為GIS數(shù)據(jù)了。
圖9 島狀斜坡的CAD數(shù)據(jù)和GIS數(shù)據(jù)
關(guān)聯(lián)關(guān)系的運(yùn)用的確解決了很多問題,與此同時,如果能使關(guān)聯(lián)關(guān)系的搜索效率達(dá)到最優(yōu),就能讓關(guān)聯(lián)關(guān)系的查詢和使用發(fā)揮最大的作用。關(guān)聯(lián)關(guān)系搜索的主要過程就是獲取了當(dāng)前地物的關(guān)聯(lián)值后,在圖面上搜索所有與當(dāng)前地物關(guān)聯(lián)值一致的地物。在研究這個問題的過程中,我們采用了許多方法。
最先采用的是通過lisp語言編寫的程序函數(shù)來查找關(guān)聯(lián),主要是為轉(zhuǎn)換島狀地物時編寫的,如圖10所示。轉(zhuǎn)換過程中讀到某地物需要搜索與之相關(guān)聯(lián)的地物時,在圖面上選擇所有的具有“TJTX”關(guān)聯(lián)關(guān)系的POLYLINE線,再進(jìn)一步判斷這些POLYLINE線的關(guān)聯(lián)值guid,關(guān)聯(lián)值一致的地物即是相互關(guān)聯(lián)的地物。這種搜索方式在處理較大數(shù)據(jù)量的圖幅時速度比較慢,效率較低,不能達(dá)到預(yù)期的效果。
為了提高效率,可用C++語言編寫的arx程序函數(shù)來完成上面的功能(圖11)。循環(huán)搜索保留原有的思路,編寫的程序模塊可以在lisp程序中直接調(diào)用,通過傳遞參數(shù)即可實(shí)現(xiàn)關(guān)聯(lián)的搜索,函數(shù)直接返回關(guān)聯(lián)地物的圖元名稱列表。用這種方式實(shí)現(xiàn)的關(guān)聯(lián)搜索速度提高了很多,基本能達(dá)到比較滿意的效果。但是在用大量數(shù)據(jù)進(jìn)行測試的過程中,這種方式的一個弱點(diǎn),就是由于內(nèi)存釋放等因素的影響,在處理較大數(shù)據(jù)量時,會導(dǎo)致AutoCAD軟件無法運(yùn)行下去。因此,在提高效率的同時,還要找到一種更加穩(wěn)定的方法來實(shí)現(xiàn)關(guān)聯(lián)的搜索。
圖10 用lisp方式實(shí)現(xiàn)關(guān)聯(lián)的搜索
圖11 用arx方式實(shí)現(xiàn)關(guān)聯(lián)的搜索
根據(jù)實(shí)驗(yàn)和測試,借用SQLite數(shù)據(jù)庫來完成對關(guān)聯(lián)進(jìn)行快速搜索是行之有效的方法。SQLite是一個內(nèi)嵌式的關(guān)系型數(shù)據(jù)庫。數(shù)據(jù)庫服務(wù)器就在程序中,其好處是不需要網(wǎng)絡(luò)配置和管理。根據(jù)它的這個特點(diǎn),可以把當(dāng)前圖面上所有具有“TJTX”關(guān)聯(lián)關(guān)系的地物記錄在SQLite數(shù)據(jù)庫中,包括地物的句柄值和關(guān)聯(lián)值(圖12),然后通過SQLite語言實(shí)現(xiàn)關(guān)聯(lián)關(guān)系的查詢搜索(圖13),并通過lisp函數(shù)獲得關(guān)聯(lián)的圖元列表(圖14)。經(jīng)過測試,這種方式不僅在速度方面達(dá)到了預(yù)期效果,而且運(yùn)行非常穩(wěn)定,是一種非常有效的方法。
圖12 SQLite數(shù)據(jù)庫記錄的句柄和關(guān)聯(lián)
圖13 程序創(chuàng)建SQLite數(shù)據(jù)庫,并記錄句柄和關(guān)聯(lián)
圖14 在SQLite數(shù)據(jù)庫中進(jìn)行關(guān)聯(lián)的搜索
本文闡述了CAD數(shù)據(jù)向GIS數(shù)據(jù)轉(zhuǎn)換的流程、關(guān)鍵問題及解決方案。實(shí)現(xiàn)CAD與GIS數(shù)據(jù)全自動轉(zhuǎn)換具有重要的意義,節(jié)省了原來因?yàn)榫S護(hù)兩套數(shù)據(jù)耗費(fèi)的大量人力物力,同時有效地避免了數(shù)據(jù)不一致情況的產(chǎn)生。
[1]陳伯雄 馮偉.VisualLISP程序設(shè)計(jì)——技巧與范例[M].北京:人民郵電出版社,2002
[2]陳述彭,魯學(xué)軍,周成虎.地理信息系統(tǒng)導(dǎo)論[M].北京:科學(xué)出版社,1999
[3]邊馥苓 .地理信息系統(tǒng)原理和方法[M].北京:測繪出版社,1996
[4]毋河海,龔健雅.地理信息系統(tǒng)GIS空間數(shù)據(jù)結(jié)構(gòu)與處理技術(shù)[M].北京:測繪出版社,1997
[5]秦洪現(xiàn),崔惠嵐,孫劍.Autodesk系列產(chǎn)品開發(fā)培訓(xùn)教程[M].北京:化學(xué)工業(yè)出版社,2008
[6]The Definitive Guide to SQLite.http://www.apress.com