田 甜 龙北平
(江西省煤田地质局测绘大队 江西南昌 330001)
AUTOLISP语言在权籍调查项目中的应用
田甜龙北平
(江西省煤田地质局测绘大队江西南昌330001)
摘要:结合实践经验,提出使用AUTOLISP语言来有效解决权籍数据处理的一些难题,通过介绍AUTOLISP语言在权籍调查项目中2个程序应用实例,说明在实际工作中可大大提高生产效率。
关键词:权籍调查;AUTOLISP语言
当前,众多的权籍类调查项目正在全国开展,比如三权调查项目、农村土地承包经营权调查项目、农房普查项目等。在使用基于AUTOCAD软件平台开发的南方CASS软件处理内业时出现,该软件虽已具备权籍数据处理的一些功能,但这些功能不能完全满足当前正在开展的各类权籍调查项目,特别是有些信息系统建库软件还没有确定,但是调查项目又必须进行,此时如果可以应用AUTOCAD软件内嵌式编程语言AUTOLISP,通过编制程序,来解决权籍数据处理的一些重复性工作,就显得很有必要。
熟练掌握AUTOLISP语言的编程环境、方法和技巧,就可以对AUTOCAD进行二次开发。编程和调用的基本步骤:(1)、针对要解决的操作问题,用文本编辑器编写*.lsp程序;(2)、使用AUTOCAD软件平台“加载AUTOLISP”菜单加载*.lsp程序;(3)、以编写程序中设置好的命令,像使用AUTOCAD标准命令一样,输入软件平台的命令行,以完成特定的操作。
3.1运用AUTOLISP语言提取界址点坐标
在宗地勘测定界、农房普查等项目中,界址点通常就是宗地勘测边界、房屋边界等封闭图形的节点。假定使用南方CASS软件,则首先需要画出权属线再生成界址点坐标表,最后将界址点坐标排版格式转换为需要的格式,这样使得工作复杂化,如果能够使用一个命令,直接提取界址点坐标,并按项目成果提交格式输出界址点坐标,则可以提高工作效率。
1)编写AUTOLISP程序“tj”,主要代码如下:
(defunc:tj()
(princ)
(setqename(ssname(ssget)0));;取图元名
(setq$acdName1(cdr(assoc0(entget ename))))
(if(wcmatch$acdName1"LWPOLYLINE,AcD-bPolyline");判断是否多段线
(setq$temp-nameename)
(setq$temp-namenil)
);_结束if,
(setqOutPutFormat(getint"输入文件格式:(1)测量成果表格式 (2)MySMTool计算格式[1]:"))
(if(=OutPutFormatnil)
(setqOutPutFormat1)
);if
;定义扩展名
(if(=OutPutFormat1)
(setqExtendName"csv")
)
(if(=OutPutFormat2)
(setqExtendName"dat")
)
(if$temp-name
(progn
(setqpllist(Getlist2$temp-name))
;;调用子程序取多段线顶点坐标
(initget4)
(setqnum(getint"请输入小数位数:[3]"))
(if(=numnil)
(setqnum3)
)
(setqfilename
(getfiled"选择文件存储目录""界址点坐标"ExtendName5)
)
(iffilename
(progn
(plout:OutFilepllistfilename(itoanum)OutPutFormat)
(setqmessage(strcat" 输出至文件:"filename))
(princ)
(princmessage)
))))
2)编制好程序代码后,在AUTOCAD中工具一栏中点击AUTOLISP,加载程序“tj”,确定加载后,只需要在CAD命令行中键入“tj”,便可选择自己所需输出文件的格式,如下图1:
按照命令框提示输入完成后,就可按照预先设置好的格式直接输出界址点坐标表,如下图2:
3.2AUTOLISP语言在地块公示图中的应用
公示信息,即指确认物权设立、变动的依据(如:登记数据)。公示图的存在就是为了让他人清楚地知道谁是权利人,以维护权利人、与交易有关的人的合法权益。在各个权籍调查项目中,都可以看到公示图的身影,因此,公示图的制作自然显得格外重要。
例如在林权调查或土地承包经营权调查等项目的公示图制作中,公示图中不仅要清楚的表示地块的四至,更要在图上标明权利人信息,宗地号、面积等信息。既要做到公示图既清晰明了,又内容具体。在原有的南方CASS软件中,是无法将这些信息直接都通过现有的命令一步到位标注到公示地块中,特别是有不少公示的图件要求以 “亩”为单位来注记。
为了使制作公示图步骤简化,使公示图更加规范,可以利用AUTOLISP语言来解决这个问题。主要核心程序代码如下:
(1);计算多段线构成的封闭面面积,并换算成亩。
(setqent1(ssname(ssget)0))
(setqpoint_list(Getlist2ent1))
(setqpoint_num(lengthpoint_list))
(setqcounter0)
(setqpl_area0)
(repeat(-point_num1)
(progn
(setqx1(car(nthcounterpoint_list)))
(setqy1(cadr(nthcounterpoint_list)))
(setqcounter(+counter1))
(setqx2(car(nthcounterpoint_list)))
(setqy2(cadr(nthcounterpoint_list)))
(setqpl_area(+pl_area(-(*x1y2)(*y1 x2))))
);progn
);repeat
(setqpl_area(abs(*pl_area0.5)))
(setqpl_area_M(*pl_area0.0015))
(setqpl_area(rtospl_area21))
(setqpl_area_M_str(rtospl_area_M22))
(2)宗地编号,可以通过创建宗地编号文件,也可以当场输入编号。下面程序含有下个宗地自动编号加1的功能。权利人信息读取和输入也可以参照这个方法进行编程。
鉴于篇幅问题,附主要代码如下:
;在指定路径创建临时文件宗地编号.txt
(setqIsFile(open(strcatWorkSpace"宗地编号.txt")"r"))
(if(=IsFilenil)
(progn
(setqfp(open(strcatWorkSpace"宗地编号. txt")"w"))
(write-line"010001"fp)
(closefp)
);progn
()
);if
;从临时文档处获取当前宗地编号
(setqfp(open(strcatWorkSpace"宗地编号. txt")"r"))
(setqzd_Num(read-linefp))
(if(=zd_Numnil)(setqzd_Num"010001")())
(setqzd_NumMsg(strcat"当前宗地编号为:" zd_Num",其后宗地将以此为基础顺次+1进行编号。 "))
(princzd_NumMsg)
(setqIsRealNum1)
(princ"是否使用该编号?")
(princ"(1)是(2)重新编号[1]:")
(setqIsRealNum(getreal))
(if(=IsRealNum2)
(progn
(closefp)
(setqfp(open(strcatWorkSpace"宗地编号. txt")"w"))
(setqzd_Num(getstring"输入新的起始编号:"))
(write-linezd_Num)
(closefp)
(setqzd_NumMsg(strcat"当前宗地编号为:" zd_Num",其后宗地将以此为基础顺次+1进行编号。 "))
);progn
(closefp)
);if
(princzd_NumMsg)
同上述,只需在AUTOCAD中加载编写的总程序后在命令行中键入总程序设置好的命令名,则可按照指示就可轻松的将此复杂性的问题简单化,实现一步到位。如下图3:
其实权籍调查项目还有很多复杂性高、重复性高的内业操作,比如:根据不同项目需求,输出不同规定格式的地块图和报表,输出特定的图框和参数,或者调入EXCEL文本数据读入到地块属性等,如果通过AUTOLISP语言编程的方法予以辅助,便可使AUTOCAD平台的权籍调查数据处理工作真正达到高效、快捷的效果。结合实践经验,本文只通过两实例简要说明了AUTOLISP语言在权籍调查项目中的运用,对于AUTOLISP语言其强大功能也有待更深的研究与探讨。
参考文献:
[1]蓝屹生.AUTOLISP学习导引[M].北京:中国铁道出版社,2003.
[2]郭朝勇等.《AUTOCAD的定制与开发》人民邮电出版社,1998.9
[3]梁雪春等.AutoCAD二次开发技术指南[M].北京:清华大学出版社,2001
[4]TDT1001—2012.地籍调查规程[s]
[5]NY/T2537—2014.农村土地承包经营权调查规程[s]