田小溫 李海剛
摘 要 分析MapGIS格式土地利用圖中各類地物的屬性數據存儲方式,介紹利用第三方工具完成提取和保存的思路和方法,從而實現MapGIS向AutoCAD的全息轉換。
關鍵詞 土地;數據處理;MapGIS;AutoCAD;全息轉換
中圖分類號:TP393.09;P208 文獻標志碼:B 文章編號:1673-890X(2016)15--02
全國第二次土地調查成果多是以MapGIS為平臺,一般是以一個縣(區(qū))為單位存儲,也可分割成標準分幅格式分別存放。一個MapGIS庫的組成包括點文件、線文件和區(qū)文件,對于二調成果,具體分別為零星地物、線狀地物和地類圖斑。
從幾何角度來講,地類圖斑是具有幾何形狀的面狀,而零星地物只有位置沒有大小,不占用圖面面積,線狀地物的寬度為零,有長度卻沒有寬度,在數字圖的概念也不占用面積。但零星地物和線狀地物占用實地面積,在MapGIS中,它們的面積值存放在相應的屬性字段里,同時說明面其面積值是從哪幾個地類圖斑中扣除及相應的比例。因此,各圖斑的同何面積值不完全是相應的地類面積,還須扣除其包含的零星地物和線狀地物。
在土地整治及其他日常地籍相關工作中,往往是取幾個圖斑部分或全部成為一宗地,并將其包含的各地類的面積進行統(tǒng)計。盡管MapGIS提供一定功能,但其數據采集和繪圖等方面較顯不足,尤其是眾多作業(yè)人員更習慣于使用AutoCAD等繪圖軟件。因此,將MapGIS格式轉換到CAD下,且保留各類地物的相關數據及相互對應關系顯得較為重要。本文旨在詳細分析上述過程的實現方法。
1 屬性數據導出
MapGIS做為一個基礎地理信息平臺,能夠提供GIS所應具備的各項功能,但對于各專業(yè)的使用者,往往缺少直接有效的操作。Section是增強輔助制圖系統(tǒng)是以MapGIS 6.7 SDK為平臺,有VC++為語言開發(fā)的二次開發(fā)軟件,其主要功能是針對地質類圖件的制作和數據分析、統(tǒng)計,在土地類工作中,可以借助其完成大部分操作。本文所提出問題便借助其導入導出功能解決。
首先,將宗地邊界在CAD中整理好,去掉多余重復點,以DXF格式保存,然后用MapGIS的“轉換”模塊生成線文件,再經“線轉弧段”和“拓樸重建”生成區(qū)文件。最后以“工程裁剪”將宗地涉及區(qū)域生成單獨的MapGIS工程,在Section中打開。
其次,將需要導出屬性值的各類文件選中成為編輯狀態(tài)(一般為DLTB.WP、XZDW.WL、LXDW.WT,分別代表地類圖斑、線狀地物和零星地物),用Section的“1輔助工具\導入導出功能\導出屬性數據(Excel)”,將會自動生成Excel文件,其包括3個表:分別為點、線、面的屬數據。其中“點”表包括標識碼、零星地物編號、地類編碼、地類名稱、零星地物面積、權屬單位名稱、坐落圖斑編號、坐落單位代碼、坐落單位名稱等字段;“線”表中包含長度、標識碼、地類編碼、地類名稱、線狀地物編號、寬度、線狀地物面積、權屬單位名稱1、權屬單位名稱2、扣除圖斑編號1、扣除圖斑坐落代碼1、扣除圖斑編號2、扣除圖斑坐落代碼2、扣除比例等字段,“面”表包括面積、周長、標識碼、圖斑編號、地類編碼、地類名稱、權屬性質、權屬單位代碼、權屬單位名稱、坐落單位代碼、坐落單位名稱、扣除類型、扣除地類編碼和扣除地類系數等字段。
2 圖的導入及圖數關系的建立
將點、線、面分別轉換成DXF文件,然后加入到同一CAD文件中,并根據所使用的軟件分層存放、轉換成相應的線型、塊或填充。然而,現有的兩種文件即圖和數并沒有關聯,只能通過人工查找才能一一對應。從各屬性字段可以看到,每個地物都包含一個字段“標識碼”,該碼值在一個MapGIS庫里是唯一的,因此可通過該碼值將CAD中的每個實體與Excel表中的屬性記錄相關聯,操作過程簡述如下。
首先,將新生成的單獨的工程文件進行標識碼整理。在屬性庫管理中,分別打開各類文件,在“屬性/統(tǒng)改屬性”中,將各對象的標識碼按增量方式進行重編,重編時可以按自己的習慣給定數值,比如:點對象從10000開始,線對象從20000開始。
其次,對于點文件和線文件,在轉成DXF格式時,以其標識碼作為各對象的高程值。
最后,面文件的轉換可以有兩種方式:一是將面按全GIS方式轉出,形成實際閉合的多義線,仍然通過其高程值與Excel中相應的記錄建立對應;二是用標識碼和面積值對每個面對象生成雙字段的注記,將該注記文件轉換成DXF格式,然后通過標識碼和面積值雙重的對應與Excel記錄建立關聯。
3 信息導入
我們建立了CAD對象與Excel中相應記錄的關聯,也就是說,針對每一個CAD中的實體,都可以根據其高程值所代表的標識碼,在Excel表中找到其相應的GIS信息記錄。當然,這個查找對應的過程若是人工完成,不僅操作繁雜、工作量巨大,尤其是無法保證完整和準確性,這里簡單介紹以編程的方法完成該項操作。
COM(Component Object Model,組件對象模型)技術是由微軟件推出的一套接口規(guī)范,主要用來在不同語言和不同程序進程之間進行通信,簡單來說,就是在自己的程序中,可以向其他程序發(fā)送指令來代替人工操作,并可以讀取其中需要的數據。
基于AutoCAD的編程可選語言比較豐富,如Visul LISP、VC++、VB等,為簡于敘述,我們選用CAD自帶的VBA為開發(fā)工具。VBA是Windows下多種軟件的開發(fā)工具,特點是簡單且直接,在CAD中,其除了與一般語言等同的各種函數,直接面向CAD本身,可以無障礙地生成訪問CAD對象和內部變量等;同時,可以將其他應用作為Component進行操作。這里將Excel作為一個部件,通過它的對象模型,就可以逐級訪問任何一個Excel文檔的所有數據,形如objExcel.Sheets(K).Cells(I,J)。
綜上,通過遍歷每個CAD對象,通過其高程或字符串作為對應值,從Excel里直接讀取各字段的屬性值,從而建立起圖與數的無縫連接。
4 CAD中信息保存
最后,我們討論如何把Excel中的記錄保存到CAD中,這里需要介紹另一個概念外部數據--XDATA。CAD為了記錄每個對象的其他信息,提供了XDATA來解決,即一個CAD實體可以附加外部數據。AutoCAD不提供擴展數據讀寫的相關命令,但通過二次開發(fā),應用VBA等編程,對某實體的擴展數據進行讀寫,如寫函數形式為:
entCAD.SetXData(XDataType, XDataValue)
句中entCAD為被寫入外部數據的實體句柄,XDataType是短整型數組,存放欲寫入的數據句的格式 ,如“1001”為外部程序名稱,“1000”為字符串。XDataValue為實際寫入值,可以將各字段的數據依次寫入。
5 結語
通過上述過程實現了從MapGIS向AutoCAD轉換中,土地利用數據庫的無損導入,限于篇幅,這里只給出了從MapGIS向AutoCAD進行全息轉化的總體思路入技術要點,有關詳細操作和編程可參閱相關書籍,在日常工作中,根據具體需要完成以上過程,可以大大提高工作效率。
(責任編輯:趙中正)