呂永杰
摘要:CASS軟件是目前地籍調(diào)查中主流的測(cè)繪軟件,運(yùn)用lisp語(yǔ)言可以方便快捷的實(shí)現(xiàn)宅基地調(diào)查中涉及到的地形圖的繪制、宗地屬性批量改正以及面積統(tǒng)計(jì)等內(nèi)容,極大的提高了調(diào)查成果的質(zhì)量和效率。
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.
關(guān)鍵詞:宅基地調(diào)查;CASS軟件;lisp語(yǔ)言
Key words: homestead survey;CASS software;lisp language
中圖分類號(hào):TP391.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文章編號(hào):1006-4311(2020)08-0211-02
0 ?引言
CASS在宅基地調(diào)查中應(yīng)用廣泛,無(wú)論是地形圖的繪制還是宗地圖的制作都便捷易操作。Lisp語(yǔ)言在CASS中可以實(shí)現(xiàn)其功能的延伸,處理一些固有功能之外無(wú)法實(shí)現(xiàn)的應(yīng)用,針對(duì)宅基地調(diào)查數(shù)據(jù)量大、結(jié)構(gòu)繁瑣、邏輯關(guān)系復(fù)雜等實(shí)際情況,可以利用lisp語(yǔ)言實(shí)現(xiàn)對(duì)調(diào)查數(shù)據(jù)的批處理,將大大提高調(diào)查工作的質(zhì)量和效率。
1 ?CASS軟件和lisp語(yǔ)言簡(jiǎn)介
CASS軟件是基于CAD平臺(tái)開發(fā)的,一套集地形、地籍、空間數(shù)據(jù)建庫(kù)、工程應(yīng)用、土石方算量等功能為一體的軟件系統(tǒng)。軟件的方便、快捷、易用充分得到了市場(chǎng)的認(rèn)可和用戶的高度評(píng)價(jià)。
LISP語(yǔ)言(LISP,List Processing的縮寫)是一種早期開發(fā)的、具有重大意義的表處理語(yǔ)言。它最突出的特點(diǎn)是實(shí)現(xiàn)技術(shù)簡(jiǎn)單,使用表結(jié)構(gòu)來表達(dá)非數(shù)值計(jì)算問題。
2 ?lisp程序在調(diào)查中的應(yīng)用實(shí)例
宅基地調(diào)查中的基礎(chǔ)數(shù)據(jù)錄入、改正和統(tǒng)計(jì)是調(diào)查中工作量最大和最容易出錯(cuò)的部分,本文根據(jù)實(shí)例來解決調(diào)查中遇到的問題。
①批量改正宗地圖中的界址相關(guān)的屬性問題。在調(diào)查中施工方會(huì)經(jīng)常遇到發(fā)包方要求變更基礎(chǔ)數(shù)據(jù),如改變界址類別、類型、界標(biāo)等情況,下面示例為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)) "宗地未處理,請(qǐng)等候!"))
);end repeat
);enddefun
(defun c:aa()
(princ "\選擇要僅留圖層的實(shí)體")
(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))
通過此例,可以實(shí)現(xiàn)界址類別的批量轉(zhuǎn)換,最大限度的提高工作的效率和質(zhì)量。
②統(tǒng)計(jì)規(guī)定范圍內(nèi)房屋數(shù)量、面積等是在宅基地調(diào)查中無(wú)論是階段性還是最終工作量的統(tǒng)計(jì)中經(jīng)常遇到的情況,通過每幅圖的逐一統(tǒng)計(jì),數(shù)量較少時(shí),可以實(shí)現(xiàn),對(duì)于宅基地調(diào)查動(dòng)輒幾萬(wàn)甚至幾十萬(wàn)宗的統(tǒng)計(jì)顯然是不現(xiàn)實(shí)的。下面示例為CASS軟件中批量統(tǒng)計(jì)范圍內(nèi)的計(jì)算面積的房屋的總面積。
;;; 磚房:
;;; 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
;;; 簡(jiǎn)單房:
;;;* 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 "是否計(jì)算簡(jiǎn)單房? 是(Y) or 否(N) "))
(setq ss (ssget ?"x" ?'((0 . "lwpolyline");過濾器選擇圓
(8 . "JMD");過濾器選擇jmd圖層 ? ) )
ssNum (sslength ss) ;選擇集中要素個(gè)數(shù)
nowNum 0;目前選擇集中的序號(hào)
jdf 0;簡(jiǎn)單房建筑面積
zf 0;磚房建筑面積
hf 0;混房占地面積
gf 0;鋼房)
(repeat ssNum ;循環(huán)處理選擇集
(setq ename(ssname ss nowNum) ;逐一取出要素
nowNum(1+ nowNum );當(dāng)前序號(hào)遞增
elist(entget ename '("south"));取得要素表
xdata(cdr(assoc -3 elist));取得要素?cái)U(kuò)展屬性表
obj (vlax-ename->vla-object ename);activex對(duì)象
mj (vl-catch-all-apply 'vla-get-area (list obj));建筑面積
);;end setq
(if ? (and (not (vl-catch-all-error-p mj)) (/= nil xdata)) ;如果有面積屬性并有擴(kuò)展屬性
(progn
(setq fwlx (cdr(nth 1 (car xdata)));;房屋類型
fwcs (cdr(nth 2 (car xdata)));;房屋層數(shù) )
(if(= fwcs nil)
(setq fwcs 1));如果沒有層數(shù)就是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"));簡(jiǎn)單房
(setq jdf (+ jdf (* mj fwcs))) )
);end progn
);end if
);end repeat
(if (= x "Y")
(print (strcat "簡(jiǎn)單房建筑面積:" (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) )
③裁切圖幅是在宅基地調(diào)查中經(jīng)常遇到的情況,將地籍總圖裁剪成50×50,50×40的標(biāo)準(zhǔn)圖幅。下面示例為地籍總圖裁剪小圖幅。
(defun c:bb()
(command "osnap" "off")
(princ "\n選擇圖號(hào)")
(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 輸入第一點(diǎn):"))
(setq xxx p1)
(if (/= p1 nil)(progn
(setq p2 (getpoint"\n 輸入第二點(diǎn):"))
(setq mmm (strcat "e:/" "plot" "/" name1))
(command "-wblock" mmm "" p1 "w" p1 p2 "")
(command "oops") ?) ) ) )
3 ?結(jié)束語(yǔ)
CASS軟件可以通過lisp語(yǔ)言方便快捷的實(shí)現(xiàn)宅基地調(diào)查中涉及到的地形圖的繪制、宗地屬性批量改正以及面積統(tǒng)計(jì)等內(nèi)容,極大的提高了調(diào)查成果的質(zhì)量和效率。
參考文獻(xiàn):
[1]天津市農(nóng)村集體土地使用權(quán)及其地上房屋調(diào)查及確權(quán)登記發(fā)證工作實(shí)施細(xì)則[S].20140903.
[2]TDT 1001—2012(最終稿),地籍調(diào)查規(guī)程[S].2012.
[3]程效軍,顧孝烈,顧振雄.測(cè)量工程LISP程序設(shè)計(jì)[M].上海:同濟(jì)大學(xué)出版社,2012年3月.