LISP在土地报备中的应用

张俊宇 李正洪 周亿萍 刘佳 庞百宁
(广西壮族自治区地理国情监测院)

  0 引言
  近年来随着地方经济的高速发展及土地使用制度的改革,对土地报备的统一性、准确性等提出了更高的要求。在土地报备工作中,制作报备坐标文件约占整个工作量的80%以上,是一项精度要求高而流程又很复杂的工作。目前测绘单位经常需要协助国土部门进行土地报备工作,而传统的土地报备坐标文件在CAD软件内无法批量生成,且很多国土部门没有专门的软件来制作土地报备坐标文件,根据以上情况,现已不能满足在短时间内完成报备的需求。当务之急是设计一个程序,使得土地报备坐标文件能够按照规定的格式批量生成。
  目前,CAD软件只能对某一图形单个生成特定格式的界址点坐标表,与土地报备坐标文件规定的格式相差甚远。要完成批量的报备坐标文件,还需要人工编辑文件,步骤十分复杂,且效率低下,故不能普及应用。为规范土地数据的报送,促进信息共享服务,增强数据对土地管理的支撑,提升土地管理水平,我们设计了一个能在AutoCAD软件运行的LISP程序,其能批量生成多个图形的报备文件,且操作方便、简单、快速。对于资金技术缺乏的中小城市和县级土地开发整理中心部门来说可以降低成本,提高其工作效率,非常实用。
  1 LISP 简介
  它是一个小巧而又强大的语言,作为一个多用途的编程语言,它可以作为脚本语言使用,也可以作为应用软件的扩展语言来使用,它具有元语言特性,还有很多独到的特色。它在AutoCAD中二次开发应用中,具有功能强大、技术先进、使用方便等优点,除了能编写丰富的函数,还具有强大的生成各种文本的功能,适用于土地报备中坐标文件的编辑和生成。LISP是集成整个AutoCAD中的开发语言和开发环境,可极大减小开发人员构建解决方案和创建应用程序的难度。利用LISP开发和创建文本文档,能够隐藏文本各种格式的潜在复杂性,并能与AutoCAD的图形信息和数据整合,让用户更有效地报备数据。
  2 土地信息报备工作
  土地信息报备工作包括土地整理复垦开发项目信息报备和耕地占补平衡挂钩管理的信息报备。每年各市县为发展地方经济,需要占用大量的耕地转为建设用地。为使耕地占补平衡,地方政府都要开展土地开垦或者复垦项目。与此同时开展的项目在获得审批之前必须对土地信息进行报备。由于项目区的图斑数量多,相应地需要提取海量信息编辑成文本,在专门的系统下实现信息的报备。其需要提取的信息包括土地立项图斑的格式版本号、数据产生单位、数据生产单位、数据生产日期、坐标系信息、分度带类型、投影类型、计量单位、带号、精度、转换参数以及地块的点数、面积以及1980西安坐标系坐标等信息。
  3 传统工作流程与存在问题
  土地报备坐标文件是TXT格式的文件,格式统一,在国土部门内部专用的报备系统读取,实现数据的上报和备案。目前,提取土地报备信息的软件主要为AutoCAD,但功能比较单一,只能提取图形的面积和坐标信息,其余的报备信息无法提取。其工作流程为:首先利用AutoCAD内部的“复合线转权属线”的功能实现,把图形复合线转换成权属线,然后利用绘制地籍表格功能自动生成界址点坐标表,其生成文件格式为excel表格形式,如图1界址点坐标表。

图1 界址点坐标表

  最后编辑excel表格,人工修改表格信息及提取相应的其它信息,保持为TXT格式的文本文件。每一个文本的生成均需要人工干预,且不能批量生成。 针对目前国土部门现阶段立项的土地开垦、复垦项目图斑数量比较多的情况,用传统的作业方法已不能满足当前的需求。因此,我们需要设计一个程序来改变现状。
  4 程序思想
  程序主要是建立一个选择集,并把“报备层”内所有复合线对象放到选择集内,然后统计选择集对象的总数量,把该数量值n赋值给程序函数的参数,最后根据函数的循环条件循环n次分别按照一定的格式把提取的信息写入txt文本,并根据复合线坐标范围内的“注记层”的文字给txt命名,批量生成不重名的文件。
  5 程序实现
  5.1 建立提取复合线坐标表的自定义函数
  使其能够根据复合线的对象名称实现提取其所有顶点坐标的功能。自定义函数如下:
  (defun vertexnew (a / bb n i pl)
  (setq bb (entget a)
  n (length bb)
  i 0
  pl '( )
  )
  (while (< i n)
  (setq b (nth i bb))
  (if (= (car b) 10)
  (setq pl (cons (cdr b) pl))
  )
  (setq i (1+ i))
  )
  (if pl
  (setq pl (reverse pl))
  (setq pl nil)
  )
  )
  其生成格式如:((1.70002e+007 66.753) (1.70002e+007 67.7791) (1.70002e+007 29.3008) (1.70002e+007 23.9139) (1.70002e+007 47.5139))。
  5.2 定义一个程序运行命令,并设置图形相关参数
  定义“JX”为程序的运行命令。
  defun C:JX ( )
  设置图形相关变量,即执行的命令过程将不会被返回到屏幕上,使其运行速度加快,并使软件界面的图形范围呈最大显示。
  (setvar "cmdecho" 0)
  (command "zoom" "e")
  5.3 建立一个选择集
  把“报备层”内所有复合线对象放到选择集内
  (SETQ SS (SSGET "x" '((0 . "LWPOLYLINE") (8 . "报备层"))))
  (SETQ L (SSLENGTH SS)
  I 0
  )
  5.4 计算面积精度
  按指定的格式和精度返回实数值,保留4位小数。
  (RTOS (/ MJ 10000) 2 4)
  5.5 自动书写报备坐标内容
  首先,根据循环条件按照规定的格式添加书写报备坐标的属性内容,其中带号是根据X坐标的前两位来提取。其次,根据每个图形元素的坐标表个数来循环提取坐标信息。再次,根据前面所提取的坐标表范围内来捕捉“注记层”文字来命名txt文件。最后,保存在D盘的jxxx文件夹里面。
  (WHILE (< I L)
  (PROGN
  (SETQ NA (SSNAME SS I)
  EN (ENTGET NA)
  pb (vertexnew na)
  DH (SUBSTR (RTOS (CAR (NTH 0 PB)) 2 0) 1 2)
  )
  (command "area" "o" na)
  (setq mj (getvar "area"))
  (SETQ S2 (SSGET "Wp" PB '((0 . "TEXT") (8 . "注记层"))))
  (setq l2 (sslength s2))
  (setq na2 (ssname s2 0)
  en2 (entget na2)
  hm (cdr (assoc 1 en2))
  )
  (SETQ Fm (OPEN (strcat "D:/jxxx/"
  hm
  ".TXT"
  )
  "w"
  )
  )
  (write-line
  "[属性描述]
  格式版本号=
  数据产生单位=
  数据产生日期=
  坐标系=80国家大地坐标系
  几度分带=3
  投影类型=高斯克吕格
  计量单位=米"
  FM
  )
  (write-line (strcat "带号=" DH) FM)
  (write-line
  "精度=0.01
  转换参数=0,0,0,0,0,0,0
  [地块坐标]"
  FM
  )
  (write-line
  (strcat (RTOS (LENGTH PB) 2 0)
  ","
  (RTOS (/ MJ 10000) 2 4)
  ","
  "1,地块1,面,,土地开垦项目,,@"
  )
  )
  Fm
  )
  (SETQ BL (LENGTH PB)
  II 0
  )
  (REPEAT (- BL 1)
  (SETQ DXY (NTH II PB)
  Y (NTH 0 DXY)
  X (NTH 1 DXY)
  )
  (write-line
  (strcat "J"
  (rtos (+ II 1) 2 0)
  ","
  "1"
  ","
  (rtos X 2 3)
  ","
  (rtos Y 2 3)
  )
  Fm
  )
  (SETQ II (+ II 1))
  )
  )
  (write-line
  (strcat "J"
  "1"
  ","
  "1"
  ","
  (rtos (NTH 1 (NTH 0 PB)) 2 3)
  ","
  (rtos (NTH 0 (NTH 0 PB)) 2 3)
  )
  Fm
  )
  (CLOSE Fm)
  (SETQ I (+ I 1))
  )
  )
  整个程序设计思想如图2所示。

图2 程序流程图

  6 程序功能及效率
  6.1 程序功能
  (1)计算“报备层”内闭合复合线的个数n。
  (2)根据复合线的个数执行循环n次,分别写出每条复合线的报备内容。
  (3)把写好的内容存在一个txt文件内,根据图形范围内的注记层的文字命名txt文件,再把txt文件保存到指定的目录下。
  (4)程序运行
  第一步:数据准备,把需要报备的图斑放到AutoCAD的“报备层”里面,并把图斑范围内的注记放到“注记层”内。
  第二步:在AutoCAD加载LISP程序,并运行程序,报备文件自动存储在D盘jxxx文件夹内。
  (5)自动生成报备文件,如图3所示。

图3 土地报备坐标文件

  6.2 程序运行效率分析
  使用程序之前,每次编辑一个报备文件均需要用AutoCAD软件先制作出界址点坐标表,然后在界址点坐标表的基础上再进行人工编辑,把漏掉的信息人工填补上,保存为TXT文本格式,每编辑一个文件平均需要10分钟的时间,费时费力。使用本程序,直接在AutoCAD软件上加载程序再运行,大概5分钟内直接可以生成出上千个报备文件。工作效率提高了上千倍。
  7 结束语
  本程序利用LISP语言,实现自动批量生成土地报备坐标文件,是结合中小城市土地部门在土地报备过程中的困难特别编制的,针对性强,效率高,速度快,给地方的土地报备工作带来了极大的便利。

地址:广西南宁市建政路5号  邮编:530023  Tel:0771-5606397  Email:webmaster@digitalgx.com

版权所有 广西基础地理信息中心 桂ICP备05009807号

Copyright Geomatics Center of Guangxi All Rights Reserved.