劉學超
(淮北職業技術學院,安徽 淮北 235000)
數據轉換是GIS中常有的普遍性問題??臻g數據庫中的數據有多種類型和多種來源,具有特殊的應用和操作要求。在GIS中經常碰到的數據轉換包括不同的數據格式轉換、空間表達形式轉換、坐標轉換和投影轉換[1]。
數據格式轉換是把現存的其他系統/軟件的數據轉換為用戶系統軟件數據格式,通過數據轉換,我們既可以降低對于數據的直接采集輸入,同時也能保證數據的質量、準確性、精度等方面。
數據采集導入作為空間數據建庫的基本組成部分,其最關鍵的工作就是處理DLG數據。DLG數據是指與現有線劃基本一致的地形要素的圖形、屬性等信息,也稱地形數據。目前數據采集大都使用的是Autodesk公司的AutoCAD或Bentley公司的MicroStation平臺,數據的文件形式分別是DWG和DGN[2]。目前,安徽省現有的地形數據都是在AutoCAD的產品。
這里主要討論在AutoCAD下導入DWG格式數據的方法。首先要進行CAD·GIS的格式轉換。這包括如下兩種方法:
是指CAD與GIS進行直接轉換或讀寫,中間不借助任何程序接口。這種方法雖然可以方便的實現數據轉換,但是由于CAD與GIS系統對空間對象描述時會有模型、語義等差別,這就導致了在進行轉換時數據信息丟失等方面的問題。比如當數據從CAD的交換格式dxf轉換成ESRI的shape文件或者Coverage時,原來定義的圖形屬性等就會丟失。這種方法不能轉換GIS中的屬性數據,因而數據的無縫轉換也很難實現。在AutoCAD端直接使用ArcSDE數據訪問API操作數據庫雖可顧及GIS的屬性數據,但是這樣不僅操作復雜而且數據庫也會存在一定風險,不如直接更新GIS數據庫。
即設置專門的程序對AutoCAD與ArcGIS進行讀寫來達到數據無縫轉換的目的。安徽省1:10000基礎地理信息數據庫的建庫過程就是采用編寫讀寫程序實現數據的無縫轉換。
使用上述的方式將DWG格式轉換為Coverage格式后,再使用空間數據引擎將數據輕松地寫入數據庫。
本轉換程序主要由兩部分組成,一部分在AutoCAD下開發的圖層整理模塊,第二部分在Arc/Info下開發的數據格式轉換模塊。
CAD到Arc/Info的數據轉換首先要將AutoCAD中的點、線、文字、屬性等圖形元素進行分類,分類原則依據Arc/Info文件。因為Arc/Info的一個數據文件中一般只有一類元素,例如點狀元素包括獨立的地物點和控制點,線狀元素包括單線水系、路網,面狀元素包括建筑物、水塘、雙線河流等。而且Arc/Info的數據文件一般是一個文件中放置的是同類、同性質的元素,例如道路元素、單線水系、電力線元素都同屬于線狀元素,但只有道路元素存放在路網的數據文件中。因此我們要將AutoCAD中的圖形元素依據上述特點進行細劃分類,然后保存在不同層,也就是將Auto-CAD的一個層與Arc/Info的一個數據文件實現對應。經過分類、分層后,圖形元素由兩種信息組成。一是元素的坐標值,也就是它的幾何信息。這一信息非常重要,我們首先要把這部分信息轉換成Arc/Info能夠直接識別讀取的格式。一是特征信息,例如點、線、面的形狀或顏色等。這一信息一般是作為Arc/Info文件中相應元素的屬性數據,因此這部分數據需要轉換AutoCAD格式的數據,以便將它們連接到Arc/Info的PAT或AAT文件中。主要步驟如圖1所示:

圖1 轉換框架圖
AutoCAD與Arc/Info之間的圖形要素并不是一一對應。AutoCAD中有點、文字、注記以及各類專用符號等,而Arc/Info中只有一些簡單要素層,所以在進行對應轉換時,我們需要做一些技術處理。AutoCAD數據轉換到Arc/Info數據需要將數據先轉化成簡單要素層,然后存為AutoCAD的交換格式DXF。下面詳細闡述在轉換過程中對所存在問題的處理。
在Arc/Info的Coverage數據沒有塊的概念,現以非面狀房屋處理為例,說明一下遇見塊如何處理。首先判斷符號的長度是否大于7.0,如果大于7.0,把其處理成線狀房屋,代碼320212;若小于7.0以塊存在,由于Arc/Info只有點、線、面、漢字、TIC等這幾種簡單要素,因此就需要在AutoCAD系統下將塊處理成點,在AutoCAD系統下塊狀符號的方向依據ANGLE項來控制,但由塊轉成點以后,ANGLE就自動取消。筆者的解決方法是暫把塊的ANGLE項內的值存在Z值項內,這種方法解決了塊狀符號的角度問題,同時解決了ArcGIS下無塊的概念。對其他塊狀符號都依據類似辦法解決。
在AutoCAD對于面狀房屋層和面狀水系層等封閉地物使用暈線填充,達到打印出圖便于讀圖和圖面美觀的效果,但數據轉換到Arc/Info下這些暈線是無用的,因此在AutoCAD環境下,需要把填充的暈線刪除:

在AutoCAD的環境下大的方面依據代碼表對數據進行了重新分類分層,對錯誤的代碼進行修正。在細節方面很好解決兩個系統下的圖形要素不一致的問題,這樣為把數據轉換成Arc/Info格式做好了充分的準備。
以B層為例,解釋一下轉換的原理:首先不考慮線的屬性,使用ArcGIS中的命令直接操作,即DXFARC直接進行轉換[3]。如下:

完成轉換之后,進行屬性信息的傳遞,依據《1:10000基礎地理信息數據生產與建庫總體技術綱要》的規定之一《1:10000基礎地理信息數據分類與代碼》,先建立B層相關的屬性表[4],如下:

按需求把相應的屬性項一一對應:

通過以上程序設計,從各個圖形元素的擴展數據中讀取出屬性數據,然后寫到Coverage格式相應屬性數據位置,把空間信息數據和屬性信息數據放在一起同時輸出[5],這樣可以很好的保證數據的一致性,實現對定制好的Auto-CAD數據到Arc/Info的coverage數據轉換。
本文提出了利用AUTO LISP語言和AML語言,分別在AutoCAD和ARC/INFO下進行對接式二次開發,以實現地物及其屬性的自動傳遞。該方法首先在AutoCAD下對數據整理,依據代碼對照表對數據重新歸層,然后在ARCGIS8.2下進行數據格式批量轉換。該方法目前已開始應用于生產,并取得良好的效果。
[1]顧杰等.地籍數據建庫方案的探討[J].測繪與空間地理信息,2009,3(1):58 -61.
[2]周勇前.AutoCAD與ARC/INFO的數據轉換[J].測繪通報,1995,(3).
[3]孫鴻睿.城市地理信息系統空間數據處理方法的研究[D].中南大學,2006.
[4]劉偉等.基于GML從DXF文件到Shape文件格式轉換的研究與開發[J].測繪科學,2004,(7).
[5]張新長,馬林兵,張青年.地理信息系統數據庫[M].北京:科學出版社,2005.