李文林李東峰胡啟亮
(江蘇省地質(zhì)勘查技術(shù)院,江蘇 南京210008)
權(quán)籍調(diào)查中,宗地四至是對宗地相對位置關(guān)系的描述,只有保證宗地四至的準確性才能確保四至調(diào)查的準確性。若依靠手工完成宗地屬性錄入,工作效率低下,且錯誤率高[1]。用軟件自動提取四至可以彌補人工的不足,但費用較高,因此自主開發(fā)的錄入軟件成為大家的追求目標。
自主開發(fā)不僅可以節(jié)省軟件采購成本,而且符合自己的操作習慣,更能隨時進行修改以適應(yīng)不同需求。
在一些公開資料中不乏四至提取的實現(xiàn)方法,但大多是基于ArcGIS等GIS軟件的,對非專業(yè)的編程人員來說,難度較大。AutoCAD作為繪圖平臺,使用者眾多,基于此的開發(fā)卻不多見。采用易于學習的二次開發(fā)工具VBA,可以實現(xiàn)南方CASS所成圖形的宗地四至自動提取。
南方CASS成圖軟件是在AutoCAD平臺上開發(fā)的應(yīng)用軟件,在測繪行業(yè)數(shù)字化測圖中使用廣泛。AutoCAD的二次開發(fā)工具,如 VBA、LISP、Object ARX等,同樣可以在CASS下使用。
VBA(Visual Basic for Application)是一種完全面向?qū)ο篌w系結(jié)構(gòu)的編程語言,嵌入在應(yīng)用程序中。它基于ActiveX Automation技術(shù),可以同任何Automation技術(shù)的應(yīng)用程序共同工作,如Microsoft Excel軟件。VBA集成開發(fā)環(huán)境非常友好,具有強大的界面設(shè)計,簡單易學,適合初學者使用。
選擇VBA作為開發(fā)工具,不僅是因為它具有與AutoCAD共享內(nèi)存空間、運行速度快等特點,更為重要得是,VBA程序不受AutoCAD版本影響,適用性較好,具有開發(fā)Microsoft Office套件的功能,交換數(shù)據(jù)方便[2]。
需要說明,AutoCAD從2010版本以后,安裝包里不再集成VBA環(huán)境,使用者需要另外安裝。
AutoCAD的DWG圖形數(shù)據(jù)庫允許用戶在任何一個圖元的數(shù)據(jù)記錄中再加入一部分自定義信息,這就是擴展屬性XDATA。XDATA數(shù)據(jù)可以是字符串、實數(shù)、整數(shù)和實體句柄等,大小不超過16 K[3]。南方CASS將地物代碼等屬性存儲在XDATA中,通過擴展屬性拓展了繪圖功能。界址線擴展屬性如下:
*Registered Application Name:south
*Code 1000,ASCII string:300000
*Code 1000,ASCII string:2150100026
*Code 1000,ASCII string:周志強
*Code 1000,ASCII string:251
第一行為注冊的應(yīng)用名“south”;第二行為CASS地物編碼,這里300000是界址線的代碼;第三行為宗地號“2150100026”;第四行為權(quán)利人“周志強”;第五行為地類號“251”;Code 1000表示DXF組碼。
這些擴展屬性中,宗地號和權(quán)利人是形成四至的重要信息。掌握了CASS擴展屬性的存儲格式,就可以通過編程存取感興趣的屬性值。
VBA提供了Set XData和Get XData的函數(shù)設(shè)置和返回擴展數(shù)據(jù)。通常擴展數(shù)據(jù)需要提供一個已經(jīng)注冊的應(yīng)用程序名稱作為不同程序之間的數(shù)據(jù)區(qū)分,如上文的“south”。
Get Xdata、Set Xdata函數(shù)如下:
object. Get XData App Name,XData Type,XData Value
object.Set XData XData Type,XData Value
函數(shù)當中,App Name為注冊的應(yīng)用名,XData-Type和XData Value是兩個變體數(shù)組,用來存放DXF組碼和屬性信息。
VBA與Office交互需要先在VBA環(huán)境中引用相應(yīng)對象庫,即在VBAIDE中打開菜單,在彈出的引用對話框的列表中查詢要引用的應(yīng)用程序?qū)ο髱?,如選擇Microsoft Excel 12.0 Object Library,引用Excel2007。
再聲明并新建一個EXCEL.Application對象:
Dim xl App As Excel.Application
創(chuàng)建或獲取這個對象:
Set xl App=Get Object(,“Excel.Application”)
If Err Then
MsgBox“Excel應(yīng)用程序沒有運行。請啟動Excel并重新運行程序。”
Exit Sub
End If
聲明Excel工作簿并獲取當前活動工作表:
Dim xlSheet As Worksheet
Set xlSheet=xl App.ActiveSheet
以后就可以通過程序操作工作表了,如存取單元格數(shù)據(jù)。
南方CASS成圖軟件將四至存儲在界址線的擴展屬性中,但沒有提供自動提取并賦值的功能。四至信息需要通過編輯宗地,手工輸入。
要實現(xiàn)四至的自動提取,就需要能搜索與本宗相鄰的宗地。資料介紹的方法基本是利用GIS軟件進行緩沖區(qū)分析判斷是否有宗地與之相鄰的,再通過計算兩個宗地重心連線方位角判斷鄰宗方位。這就需要將原始圖件轉(zhuǎn)換成GIS圖件。這不僅增加了作業(yè)環(huán)節(jié),還提高了電腦的軟硬件配置和對作業(yè)員技術(shù)水平的要求,相當于增加了項目成本。
AutoCAD只是一個圖形編輯平臺,空間分析能力不強,這是少有開發(fā)的原因之一。既然可以通過界址線的擴展屬性獲得宗地號和權(quán)利人信息,而相鄰宗地一般會有一段界址線重合,那么通過重合的界址線和界址線的方位角,就可以發(fā)現(xiàn)鄰宗并得出鄰宗方位。也就是說,不用空間分析也可獲取宗地位置關(guān)系。
編程思路如下:遍歷圖上所有宗地,對每一宗地遍歷每段界址線,如界址線位置還存在另一條界址線,則說明這里存在鄰宗,獲取鄰宗宗地號和權(quán)利人信息,同時計算該段界址線的方位角,根據(jù)方位角判斷鄰宗方位,最后將鄰宗信息輸出(圖1)。
圖1 四至輸出流程
獲取鄰宗問題的關(guān)鍵是找出重合的界址線。已知AutoCAD有多種方式選擇對象:點取方式、窗口方式、交叉選擇等。點取一次只能選擇一個對象,窗口選擇的是所畫矩形窗口內(nèi)部的所有對象,而交叉選擇能將與所畫矩形框相交及包含的所有對象選中。
以一段界址線的中點為中心,構(gòu)建一個微型矩形框,采用交叉選擇方式選擇該位置的所有線條。地物編碼為界址線編碼的對象個數(shù)如果大于1,說明存在重合的界址線。排除本宗界址線,剩下的則是鄰宗的。
交叉選擇函數(shù)如下:
object.Select acSelectionSetCrossing,Point1,Point2,F(xiàn)ilter Type,F(xiàn)ilter Data
Point1、Point2為構(gòu)成矩形的對角點坐標點列,F(xiàn)ilter Type和Filter Data是兩個變體數(shù)組,用于存放使用的過濾器類型的DXF組碼和過濾器的值。
遍歷宗地的方法是先建立過濾器,將所有宗地加入選擇集,然后遍歷選擇對象。遍歷界址線是計算宗地邊線相鄰節(jié)點坐標的中點。
南方CASS中,繪制宗地時要求按順時針方向連接界址點,形成界址線。界址線為封閉多段線,構(gòu)成宗地。VBA可以獲取界址線的點列坐標,在每段界址線中點位置查找重合界址線,發(fā)現(xiàn)重合則計算該線段前進方向左側(cè)垂線方向的方位角,該方向即為指向鄰宗的方位角。界址線某頂點坐標為object.Coordinate(index),其中index為頂點陣列中需要查詢的頂點索引。
如下所示(圖2),方位角介于45°—135°之間判定為東至,135°—225°之間為南至,225°—315°之間為西至,315°—360°以及0°—45°之間為北至。
圖2 方位判定
依據(jù)上述思想編制的應(yīng)用程序,在多個農(nóng)村土地承包經(jīng)營權(quán)項目中得到較好應(yīng)用,將承包地塊四至等公示信息成功輸出到Excel電子表格當中,但相關(guān)程序尚存在完善之處。
(1)鄰宗信息在界址線重合的條件下,能夠正確輸出。四至為路、溝等情況的,因無重合界址線而輸出為空。這類四至變化并不頻繁,手工補充難度不大。
(2)隔路、埂、溝等無重合情況的鄰宗可以通過調(diào)整交叉選擇的微型矩形邊長處理。因為這種情況較少,本文未進行實驗。
(3)程序處理的是每段界址線,在界址線轉(zhuǎn)折多的情況下,局部方位與整體方位不一致,需要手工處理。
(4)界址線未按順時針繪制的四至方位會造成顛倒現(xiàn)象,需要通過加強圖形或檢查原始調(diào)查記錄予以消除。
生產(chǎn)工作中,經(jīng)常需要通過二次開發(fā)拓展軟件功能,提高工作效率。VBA開發(fā)工具內(nèi)嵌于很多軟件中,很好繼承了Basic和Visual Basic易學、易用的特點,通用性強,開發(fā)周期短,現(xiàn)階段仍具有生命力。在AutoCAD繪圖平臺下用VBA開發(fā),實現(xiàn)權(quán)籍調(diào)查宗地四至的自動提取,繪圖同時即可完成四至輸出,不需額外增加軟硬件成本,能夠極大提高工作效率和信息準確性,取得較好結(jié)果。