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