(南昌市測繪勘察研究院 江西南昌 330008)
在南方CASS5.0 版本以上數(shù)字化地形地籍成圖軟件中,南方公司制作了“高程點生成數(shù)據(jù)文件”的工具,該工具可對CASS格式的三維高程點進行提取,但對于二維圖形的高程是無法提取的。因此,通過編寫程序將二維圖形中高程的自動提取,保證進一步的地形圖高程的利用,非常具有現(xiàn)實意義。
AutoCAD 二維圖形中,高程點通常表示方式是由平面坐標和高程注記來表示的,高程點無高程屬性,因此,通過搜索高程點最近的高程注記,可進行高程屬性的自動賦值。
在二維圖形中提取高程,需用到DXF 組碼,我們可能通過AutoCAD 自帶的《DXF 參考手冊》中查找文件中圖元、圖塊及對象的組碼,也可以在VISUAL LISP 控制臺中鍵入“ (setq g (entget(car(entsel " 請選擇圖形對象"))))”然后將光標移至變更名“g”右健“檢查”便可查詢圖元所涉及的組碼,本文圖形對象所涉及的DXF 組碼主要有以下幾種:高程注記圖塊的組碼如次頁圖1。
圖1中“[1(]0“.TEXT”)”中的“0”為DXF 組碼,表示高程點在CAD 圖形中表示圖元的對象類型,“TEXT”表示對象類型的名稱“;[7(]8“.地形圖”)”中的“8”為DXF 組碼,表示高程點在CAD 圖形中表示圖元所在圖層,“地形圖”表示圖元所在圖層的名稱;“[10(]10 54789.9 53263.6 0.0)”中的“10”為DXF 組碼,表示高程點在CAD 圖形中表示圖元的坐標,“54789.9 53263.6 0.0”為 圖元 坐 標;“[12](1.“16.60”)”中的“1”為DXF 組碼,表示高程點在CAD圖形中表示圖元的注記內容“,16.60”為高程注記。高程點圖塊的組碼如次頁圖2。
圖2中“[1(]0“.ARC”)”中的“0”為DXF 組碼,表示高程點在CAD 圖形中表示圖元的對象類型,“ARC”表示對象類型的名稱;“[7(]8“.地形圖”)”中的“8”為DXF 組碼,表示高程點在CAD 圖形中表示圖元所在圖層,“地形圖”表示圖元所在圖層的名稱;“[11(]10 54788.9 53264.8 0.0)”中的“10”為DXF 組碼,表示高程點在CAD 圖形中表示圖元的坐標“,54788.9 53264.8 0.0”為圖元坐標。
本文所解決的問題就是如何科學地將高程點中從標值中的“0.0”替換成高程注記中注記內容中的“16.60”。
我們可以通過以下步驟進行高程點的提取。
(1)選取二維圖中任一高程點和高程注記,獲得高程點和高程注記的圖元類型及圖層名等屬性;
(2)設置高程點搜索高程注記的限差,設置提取后高程點和高程注記的圖層名;
(3)獲取所有高程點和高程注記的平面坐標;(4)從高程點數(shù)組中提取一個高程點坐標;
(5)搜索高程點最近的高程注記,并判斷是否滿足限差要求,若滿足要求,進入步驟(6),否則進行步驟(7);
(6)用高程注記值替代高程點的Z坐標,并將該高程點和高程點注記的圖層名更改為步驟(2)中設置好的圖層名;
(7)該高程點存至另一圖層,待手工處理,并剔除出高程點數(shù)組,進行步驟(4),提取下一高程點坐標;
(8)提取的高程點是否要輸出至文本?是,則輸出高程點數(shù)據(jù)文本后退出,否則直接退出程序。算法流程圖如下圖3。
圖1 高程點注記組碼示例
圖2 高程點組碼示例
圖3 算法流程圖
[主程序]
本文利用Visual lisp 語言開發(fā)的小程序,可以直接二維圖形中高程數(shù)據(jù)的提取,為后續(xù)高程的利用打下了堅實的基礎,并且在程序運行結束后,可以在圖層管理器中查找到未賦予高程和已賦高程的數(shù)據(jù)情況,便于手工處理。節(jié)省了工作人員的大量勞動,提高了工作效率,是一個很實用的程序。
[1]Autodesk 公司,Autolisp Reference,2005.
[2]Autodesk 公司,Autolisp Developers Guide,2005.
[3]Autodesk 公司,Autolisp 教程,2005.
[4]Autodesk 公司,DXF 參考,2005.
[5]Autodesk 公司,objectARX,2005.