摘 要:dgn格式的基礎地理空間數據如何提供給其他軟件應用,或用于建立基礎地理空間數據庫,將涉及數據轉換以及如何使在轉換的過程中保持原有信息的不丟失等一系列關鍵問題,而在轉換過程中主要考慮的問題是dgn數據中的地物的編碼等屬性信息和幾何定位信息的正確提取。以解決這一問題為目標,結合牡丹江地形圖的dgn格式數據,闡述了通過在Microstation下用其自帶的MDL語言編程實現dgn數據與AuvtoCAD下的數據進行交換的一個行之有效的實用方法。把dwg格式數據作為dgn格式數據的導出的最終文件。
關鍵詞:外部數據交換;空間要素;圖形信息;編碼信息;屬性數據;元素
引言
隨著計算機的高速發展,各種繪圖軟件越來越多,而對于不同的單位所應有的繪圖軟件也不盡相同,甚至是同一個單位的數據格式也不是一致。但是數據還要共享,因此在不同格式數據間轉換是一個刻不容緩的問題。
雖然大多數軟件都提供轉換到其他格式數據的功能,可是在轉換的過程中總會出現一些問題,例如在牡丹江市dgn數據向dwg數據轉換時,就會出現數據量大量增加,圖層信息混亂。所以在不同的數據間建立一個接口,使不同格式的數據在轉換時盡量做到不丟失數據同時數據量也不是大大增加是我們所要解決的問題。為此文章主要是根據牡丹江dgn數據在生產中轉換到dwg數據時出現的問題而進行的討論。通過Microstation的自帶語言MDL語言進行編程實現兩種數據間的轉換。
1 dgn數據提取的轉換
1.1 dgn 數據文件的分析
Microstation設計文件采用Intergraph標準文件格式(ISFF),亦稱IGDS格式,其文件結構由文件頭、若干個Element塊、設計文件結尾標記EOD(End Of Design file)三部分組成。
Element塊實為一結構體(C/C++),由固定部分和可變部分組成。固定部分占用位于結構體頭部的18個字,定義了一些通用的數據項,即第一個字定義為Elementheader,第二個字定義為WTF,第三至十四個字用于存放元素的范圍等。Element 時Microstation的存儲單元,在dgn文件中element的存儲順序是和數字化時的順序一樣的。在dgn文件中element分為簡單元素和復雜元素。
1.2 循環讀取設計文件中的元素(element)
因為在設計文件中單元的存儲順序是數字化時的順序,而且每個單元都有一個指向下一個元素的指針,所以我們如果想讀取設計文件中的所有元素只需從第一個元素開始讀取直至設計文件的末尾。這部分用到的主要程序如下:
mdlWorkDgn_read(elem,filepos,fileP,filepos,0);
while(status=mdlWorkDgn_read(elem,filepos,fileP,filepos,0))
/*status為一整形變量,用來記錄當前指針的位置*/
{ …………………………
/*中間為具體的處理函數*/
…………………………
filepos=status;
}
1.3 提取元素的幾何坐標
提取地物的空間幾何坐標是我們想要做的一個主要任務。因為在Microstation中element的類型是有很多種,例如元素類型type=2、typ2=3、type=15等等。所以對于不同類型的element我們提取時所用到的函數也是不盡相同的。下面以type=3為例講述以下幾何坐標的提取過程。首先我們要判斷元素的類型是否為3:
if(mdlElement_getType(elem->el)==3)
如果是的話我們就提取線上的各個定點坐標;
mdlLinear_extract (pt, numVertices,elem->el, fileNum);
在此我們還要注意的是當元素的類型等于2的時候,此時的元素是復雜元素,我們提取幾何坐標時還要分開復雜元素為若干個簡單元素進行提取。
1.4 地物編碼信息的提取
在數字化圖中,為了更加有效的管理地物,為此每種地物都有自己的編碼,dgn圖中也不例外。而地物編碼時我們從一個格式的數據轉換到另一個格式數據的主要依據之一。所以我們在提取dgn數據時,地物的編碼信息也是我們必須得到的。在dgn文件中我們可以把地物編碼等屬性信息用函數
mdlElement_extractAttributes(length,attribute,elem->el);
提取出來存到短整形的數組attribute中。但是在這個數組中不僅僅存儲了編碼信息,還有其他的屬性信息,為了得到我們想用的信息,我們可以用一系列的條件來提取編碼。此時還有問題需要我們解決,那就是有的地物編碼的值大于32767,對于短整形數組attribute是不能存儲這樣的值的。遇到這樣的情況我們也要特殊處理。
1.5 檢驗導出數據的質量
雖然我們已經成功的從Microstation中導出了數據,但是我們并看不出所導出數據是否完整,為了驗證數據的完整性,我們將導出的數據直接寫成lsp語言的形式,然后再CAD中將這程序加載進去將其導入成圖,通過dgn和dwg兩幅圖的比較,我們可以看出對于導出的數據無論在屬性信息還是地物的空間信息上都是沒有數據的丟失,而且我們也達到了不同中地物在CAD的不同層內的條件。
2 dwg文件的檢查
dwg文件的編輯:對于從dgn導出的數據轉換成dwg文件后,有時我們需要對dwg文件進行編輯。因為在dwg文件中有個別的地物在生成的時候出現了一些問題,例如在遇到道路的圓弧時程序生成的圓弧可能與原方向正好相反,所以對于這類問題我們需要重新處理一下,使數據質量進一步提高;還有就是由于dgn格式數據本身的問題有些本應該是閉合的地物卻斷開了也需要我們去處理一下。下面具體的具幾個例子說一說我們對dwg文件的編輯。
一般來說房屋都應該是閉合的,但是我們轉換時所用的是pline形式,所以我們應該讓它們閉合成一個整體,在CAD中我們編輯pline線所用的命令是“pe”然后選擇一條線-〉選擇編輯的方式在這里我們選擇的是“J”(合并)->選擇下一條線直到完畢。還有就是由于我們采用的dgn格式數據在轉換的過程中一些數據的圖層信息丟失或者混亂,對于這些地物被我們應對其加以出理,以使它們滿足地物分層的需要,例如對于高程點它在dgn格式的數據中是沒有屬性的,所以我們應在CAD中把這些高程點重新放到一個層中并給它們標注上編碼。
3 結束語
采用要素的分類編碼特征作為數據交換文件的內容,要素的屬性數據主要以分類編碼為主,雖然地物間的分類已經清楚。但如果像我們現在使用的牡丹江市的數據中遇到那些沒有屬性的地物時,我們就顯得有些無從下手,只好把這些地物統一放到一起。還有就是對于在dgn中的復雜元素因為我們是分開來提取的所以在轉換到其他的軟件中寫時,我們還應考慮如何把其重新組合成一個整體。在文章中我們還需要檢查一下導出數據的質量問題,使那些數據的質量進一步提高,以滿足其他單位的需要。
參考文獻
[1]毛衛華,應荷香.DGN數據格式轉換的研究與實驗[J].測繪通報.
[2]張春泉,趙賢珍,薛煒.地圖數據從Microstatin到AutoCAD轉換的探討[J].
[3]藍榮欽,王志勇,申春明.Microstatin二次開發的方法和步驟[J].東北測繪季刊.
[4]胡德承,田鵬波.DGN到DWG地形圖數據轉換的實現[J].城市勘測,2001(1).
[5]郭朝勇,等.AutoCAD R14(中文版) 二次開發技術[M].清華大學出版社.