APP下载

lisp语言在宅基地调查中的应用研究

2020-04-22吕永杰

价值工程 2020年8期

吕永杰

摘要: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月.