王保國
(蚌埠市勘測設計研究院,安徽 蚌埠 233000)
AutoCAD以其強大的圖形繪制與編輯功能、友好的界面設計、參數化命令與可視化操作相結合的工作模式,成為主流的制圖軟件之一[1]。數字線劃圖(DLG)是數字化地形圖的重要產品類型,通過點、線及地物注記的方式反映空間地理信息。南方數碼基于AutoCAD研發的南方CASS系列數字地形圖生產軟件提供了包括居民地、水系、道路、獨立地物及地物注記等全要素地形圖繪制功能,并且能夠通過編碼實現與國家地理信息數據的有機統一,滿足大多數測繪生產需要。雖然南方數碼制圖軟件已經比較充分地實現了AutoCAD制圖與測繪的有效結合,但AutoCAD軟件本身的一些缺陷仍無法克服,如圖形易串圖層、屬性庫缺陷等[2]。國內測繪行業多用AutoCAD作為地形圖繪制工具,而在多次重復的地形圖編輯處理后,不可避免地存在重疊地物要素,而軟件本身沒有重疊要素檢測及處理功能。過多重疊圖形要素的出現,既增加了冗余數據,降低了數據成果質量,也影響了圖面美觀。因此,如何去除數字地形圖成果中的重疊要素是一個必須考慮的問題。可以借助第三方軟件來實現,但過程煩瑣且操作復雜[3]。本文嘗試采用AutoCAD VBA二次開發技術,制作一個數據處理工具,通過檢測數字線劃圖中的重疊要素,實現重疊要素的去除,以期滿足圖面整飾與GIS入庫需求。
AutoCAD是一種面向各行業的通用軟件平臺,作為一種重要的、簡單易用的制圖軟件,成為數字線劃圖的重要生產工具之一。AutoCAD VBA二次開發環境是AutoCAD軟件結合VB語言與AutoCAD本身特性的一種強大的軟件二次開發技術。不但具有VB語言的語法簡單、易學且功能強大的基本特征,且能與AutoCAD運行于同一處理空間,并通過ActiveX Automation接口實現對AutoCAD模型空間的編程控制,調用AutoCAD軟件本身的圖形處理資源。通過AutoCAD命令VBAIDE啟動VBA開發環境,進行程序編寫[4]。
本文中處理的地物圖形要素主要包括點、線和文本注記。通過對DLG數據成果的檢索,檢測其中的重疊圖形要素,并統一歸入一個臨時圖層中。首先,對檢測區域建立二維網格,將DLG數據劃分到一定的空間網格中。然后,分別對每個網格內的地物要素進行遍歷,分類檢測出重疊的地物要素,并歸入臨時圖層。最后,對臨時圖層中的重疊要素進行認知判斷,是否符合檢測要求,符合要求的予以刪除,達到去除重疊要素的目的。總的技術流程如圖1所示。
南方CASS生產的全要素數字線劃圖信息量巨大,地物要素類型豐富,涵蓋現狀地物與抽象地物要素。但要素表現形式主要包含3種:點、線和文本注記。其中點要素包含獨立的點狀要素,也包含獨立地物,如路燈等;線要素表示線狀地物及面狀地物輪廓線等;文本注記為對地物要素的注記說明,如地名、建筑屬性、道路名稱等。本文對三種類型分別進行處理,已達到檢測重疊要素的目的。

圖1 DLG重疊要素去除方法技術流程圖
(1)點狀要素的重疊檢測
在數字線劃圖中,點狀要素主要包括圖形類型、空間位置、地物類型屬性。在重復檢測過程中,首先篩選出圖形類型相同的點狀要素,然后空間位置距離滿足設置的空間距離閾值,且地物類型相同,則可初步判為重疊要素。
(2)線狀要素的重疊檢測
線狀要素有多種類型,在重疊檢測中,首先判斷兩個要素是否為同一種線型。其次判斷地物要素類型是否相同,最后檢測線的節點是否相同,都滿足的則可初步判為重疊要素。
(3)文字注記的重疊檢測
數字線劃圖中文本注記也是多種多樣,無論文字類型和文字注記所表示的地物類型與文字內容都不盡相同。在重疊文字注記的檢測中,首先篩選相同的文字類型,然后檢測是否為同一類地物注記,最后判斷注記位置是否在閾值內以及注記內容是否一致,都滿足則判為重疊要素。
在重疊要素檢測過程中,首先設置二維格網,并計算每個網格的范圍,然后采用VBA選擇集的acSelectionSetCrossing方法提取網格內地物要素。以檢測重疊文本注記為例,簡述主要的實現過程。
提取網格內的文字注記,主要代碼如下:
Dim sset As AcadSelectionSet
Set sset = ThisDrawing.SelectionSets.Add("sset") ’定義選擇集
sset.Select acSelectionSetCrossing,corner1,corner2,groupCode,dataCode
acSelectionSetCrossing是AutoCAD中選擇集的一種選擇模式,通過兩點定義一個矩形,然后選擇矩形范圍內的圖形要素。corner1,corner2為定義矩形的兩個角點,此處為當前網格的兩個對角點。groupCode,dataCode為選擇集獲取數據的過濾器,限定為選擇文本注記。
獲取網格內的所有文本注記后,首先檢測ObjectName屬性,是否與目標文本相同類型(單行文本、多行文本等)。若文本類型相同,進而檢測文本內容及兩個文本的插入點距離是否滿足閾值要求,主要代碼如下:
txtInsertionPoint1 = objtxt1.InsertionPoint ‘獲取文本的插入點坐標
GetDist2D(x1,y1,x2,y2) < dist ‘GetDist2D為自定義過程函數,計算兩個點(x1,y1)、(x2,y2)的距離值,dist為預設閾值。
objtxt1.TextString ‘獲取文本注記的內容屬性
若滿足距離閾值限值與文本內容相同,則初判重疊要素,移入臨時圖層“重疊要素”中:
objtxt1.Layer = "重復實體" ‘將文本要素移入臨時圖層中
點狀要素、線狀要素的重疊檢測過程類似,只在檢測的內容上略有差異。
提取的重疊要素統一放在臨時圖層中,經過最終檢查后,決定是否進行去除處理。
對蚌埠市某區域約5.2 km21∶1 000數字線劃圖進行重疊要素檢測,設置點狀要素空間距離閾值 0.5 m,文本注記空間距離閾值 1 m,共用時約 12 min,檢測出重疊要素共有點狀要素31個,線狀要素15個,文本注記60個。如圖2(a)為數字線劃圖原圖,圖2(b)為檢測出的重疊要素臨時圖層。從重疊要素檢測結果上看,文本注記重疊最多,點狀地物次之,線狀要素相對較少。使用該檢測方法,并對蚌埠市 1∶1 000全要素數字線劃圖進行重疊要素檢測,較好地達到預期目標,解決了實際問題。

圖2 1∶1 000數字線劃圖重疊要素檢測
使用本文的檢測方法,編寫的重疊要素檢測工具,可以快速、有效地去除數字線劃圖中的文字、單一線狀要素等重疊地物要素,進一步提高了數字線劃圖的成果質量。在檢測過程中,閾值的設置直接影響點狀要素及文本注記的精度,而網格設置的大小對檢測速度有重要影響。但本方法尚有不足之處,首先對橢圓、樣條曲線等復雜曲線線型地物精確度不足,其次無法準確對復合圖形或包含多圖形的塊參照進行處理,這些將是后續改進與完善的方向。