呂永杰
摘要:CASS軟件是目前地籍調查中主流的測繪軟件,運用lisp語言可以方便快捷的實現宅基地調查中涉及到的地形圖的繪制、宗地屬性批量改正以及面積統計等內容,極大的提高了調查成果的質量和效率。
Abstract: CASS software is the mainstream surveying and mapping software in cadastral surveys. The use of lisp language can quickly and easily implement the topographic mapping, parcel attribute batch corrections and area statistics involved in homestead surveys, which greatly improves the quality and efficiency of survey results.
關鍵詞:宅基地調查;CASS軟件;lisp語言
Key words: homestead survey;CASS software;lisp language
中圖分類號:TP391.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼:A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文章編號:1006-4311(2020)08-0211-02
0 ?引言
CASS在宅基地調查中應用廣泛,無論是地形圖的繪制還是宗地圖的制作都便捷易操作。Lisp語言在CASS中可以實現其功能的延伸,處理一些固有功能之外無法實現的應用,針對宅基地調查數據量大、結構繁瑣、邏輯關系復雜等實際情況,可以利用lisp語言實現對調查數據的批處理,將大大提高調查工作的質量和效率。
1 ?CASS軟件和lisp語言簡介
CASS軟件是基于CAD平臺開發的,一套集地形、地籍、空間數據建庫、工程應用、土石方算量等功能為一體的軟件系統。軟件的方便、快捷、易用充分得到了市場的認可和用戶的高度評價。
LISP語言(LISP,List Processing的縮寫)是一種早期開發的、具有重大意義的表處理語言。它最突出的特點是實現技術簡單,使用表結構來表達非數值計算問題。
2 ?lisp程序在調查中的應用實例
宅基地調查中的基礎數據錄入、改正和統計是調查中工作量最大和最容易出錯的部分,本文根據實例來解決調查中遇到的問題。
①批量改正宗地圖中的界址相關的屬性問題。在調查中施工方會經常遇到發包方要求變更基礎數據,如改變界址類別、類型、界標等情況,下面示例為CASS軟件中批量修改界址類別。
(vl-load-com)
(print "=======================")
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setq ss(ssget "x" '((0 . "POLYLINE")(8 . "JZD")))
sn(sslength ss)
i 0
);endsetq
(repeat sn
(setq e1(ssname ss i))
(while
(setq ee1(entnext e1));
(progn
(setq data(entget ee1 '("*")));
(setq data1 (assoc -3 (entget ee1 '("*"))))
;(setq data2(cadr(assoc '-3 (entget ee2 '("jzxlb")))));
(setq data1(subst '("JZXLB" (1000 . "9 XX")) '("JZXLB" (1000 . "8 XX")) data1))
(setq data (subst data1 (assoc '-3 data) data))
(entmod data)
(setq e1 ee1)
);end progn
);end while
(setq i(+ i 1))
(print (strcat "還有" (itoa(- sn i 1)) "宗地未處理,請等候!"))
);end repeat
);enddefun
(defun c:aa()
(princ "\選擇要僅留圖層的實體")
(setq ename (car (entsel)))
(if (/= nil ename)
(progn
(setq lay (cdr (assoc 8 (entget ename))))
(setvar "clayer" lay)
(command "-layer" "off" "*" "" "" "") ) )
(princ))
(defun c:q()
(command "-layer" "on" "*" "" )
(princ))
通過此例,可以實現界址類別的批量轉換,最大限度的提高工作的效率和質量。
②統計規定范圍內房屋數量、面積等是在宅基地調查中無論是階段性還是最終工作量的統計中經常遇到的情況,通過每幅圖的逐一統計,數量較少時,可以實現,對于宅基地調查動輒幾萬甚至幾十萬宗的統計顯然是不現實的。下面示例為CASS軟件中批量統計范圍內的計算面積的房屋的總面積。
;;; 磚房:
;;; Registered Application Name: south
;;;* Code 1000, ASCII string: 141121
;;;* Code 1040, Real number: 2
;;; 混房:
;;;* Registered Application Name: south
;;;* Code 1000, ASCII string: 141161
;;;* Code 1040, Real number: 3
;;; 簡單房:
;;;* Registered Application Name: south
;;;* Code 1000, ASCII string: 141200
;;; 鋼房屋;;;
;;;* Registered Application Name: south
;;;* Code 1000, ASCII string: 141141
;;;* Code 1040, Real number: 4
;;;命令 tj
(vl-load-com)
(defun c:tj()
(gc)
(initget 1 "Y N")
(setq x (getkword "是否計算簡單房? 是(Y) or 否(N) "))
(setq ss (ssget ?"x" ?'((0 . "lwpolyline");過濾器選擇圓
(8 . "JMD");過濾器選擇jmd圖層 ? ) )
ssNum (sslength ss) ;選擇集中要素個數
nowNum 0;目前選擇集中的序號
jdf 0;簡單房建筑面積
zf 0;磚房建筑面積
hf 0;混房占地面積
gf 0;鋼房)
(repeat ssNum ;循環處理選擇集
(setq ename(ssname ss nowNum) ;逐一取出要素
nowNum(1+ nowNum );當前序號遞增
elist(entget ename '("south"));取得要素表
xdata(cdr(assoc -3 elist));取得要素擴展屬性表
obj (vlax-ename->vla-object ename);activex對象
mj (vl-catch-all-apply 'vla-get-area (list obj));建筑面積
);;end setq
(if ? (and (not (vl-catch-all-error-p mj)) (/= nil xdata)) ;如果有面積屬性并有擴展屬性
(progn
(setq fwlx (cdr(nth 1 (car xdata)));;房屋類型
fwcs (cdr(nth 2 (car xdata)));;房屋層數 )
(if(= fwcs nil)
(setq fwcs 1));如果沒有層數就是1
(if (= fwlx "141121");磚房
(setq zf (+ zf (* mj fwcs))) )
(if ?(= fwlx "141161");混房
(setq hf (+ hf (* mj fwcs))) )
(if (= fwlx "141141");鋼房
(setq gf (+ gf (* mj fwcs))) )
(if (and (= fwlx "141200")(= x "Y"));簡單房
(setq jdf (+ jdf (* mj fwcs))) )
);end progn
);end if
);end repeat
(if (= x "Y")
(print (strcat "簡單房建筑面積:" (rtos jdf 2 2) " 磚房建筑面積:" (rtos zf 2 2) " 混房建筑面積:" (rtos hf 2 2) " 鋼房建筑面積:" (rtos gf 2 2) ? " 總建筑面積:" (rtos (+ jdf zf hf gf) 2 2)))
(print (strcat "磚房建筑面積:" (rtos zf 2 2) " 混房建筑面積:" (rtos hf 2 2) " 鋼房建筑面積:" (rtos gf 2 2)" 總建筑面積:" (rtos (+ ? zf hf gf) 2 2))))
(print) )
③裁切圖幅是在宅基地調查中經常遇到的情況,將地籍總圖裁剪成50×50,50×40的標準圖幅。下面示例為地籍總圖裁剪小圖幅。
(defun c:bb()
(command "osnap" "off")
(princ "\n選擇圖號")
(setq s (ssget))
(setq th 0)
(setq xxx 0)
(setq name (ssname s 0))
(setq a (entget name))
(setq t1 (assoc '0 a))
(setq t1 (cdr t1))
(if (= t1 "TEXT") (PROGN
(setq tx (assoc '1 a))
(setq tx (cdr tx))
(setq llen (strlen tx))
(setq llen (- llen 2))
(setq tx1 (substr tx 1 llen))
))
(while (/= xxx nil)
(if (< th 10)(setq thh (strcat "0" (rtos th 2 0))))
(if (>= th 10)(setq thh (rtos th 2 0)))
(setq name1 (strcat tx1 thh))
(setq th (+ th 1))
(setq p1 (getpoint"\n 輸入第一點:"))
(setq xxx p1)
(if (/= p1 nil)(progn
(setq p2 (getpoint"\n 輸入第二點:"))
(setq mmm (strcat "e:/" "plot" "/" name1))
(command "-wblock" mmm "" p1 "w" p1 p2 "")
(command "oops") ?) ) ) )
3 ?結束語
CASS軟件可以通過lisp語言方便快捷的實現宅基地調查中涉及到的地形圖的繪制、宗地屬性批量改正以及面積統計等內容,極大的提高了調查成果的質量和效率。
參考文獻:
[1]天津市農村集體土地使用權及其地上房屋調查及確權登記發證工作實施細則[S].20140903.
[2]TDT 1001—2012(最終稿),地籍調查規程[S].2012.
[3]程效軍,顧孝烈,顧振雄.測量工程LISP程序設計[M].上海:同濟大學出版社,2012年3月.