自动形成全站仪文件的多用程序

2014-04-29 00:44季军
科技资讯 2014年27期

季军

摘 要:该文中提供的Auto LISP程序,能够自动形成Leica TCR1102全站仪和南方NTS-662全站仪控制点成果文件,从而完成了全站仪数据文件的建立。

关键词:控制点拾取 Auto LISP程序 控制点成果文件

中图分类号:P204 文献标识码:A 文章编号:1672-3791(2014)09(c)-0011-01

随着电子计算机技术和光电测距技术的发展,测绘技术和测绘设备也发生了翻天覆地的变化,每个测绘工作者都受益匪浅。单位从1997年开始,应用Auto CAD绘图。当时测图所用的仪器为T1光学经纬仪,配合上架的DI-1000测距仪。可想而知,当时只能采用手工记录观测数据。2002年以后,单位先后购置了Leica TCR1102全站仪和南方NTS-662全站仪各一台。在用它们测图和放线时,都将用到控制点数据文件。刚开始时,只要用到以前的控制点数据都是在全站仪上直接键入,从而形成控制点文件。但对于大量的控制点成果,靠手工在仪器上键入不但工作效率低,而且也容易出错。怎样才能够将Auto CAD图中的控制点成果,形成全站仪数据文件呢?经过反复思索,针对该单位使用的绘图软件和仪器设备的实际情况,通过编写Auto LISP程序,解决了已有控制点成果的批量输入问题,而且能够用于两种型号的仪器。

为了编写能够自动形成全站仪数据文件的程序,在编写程序之前,我仔细研究了Leica TCR1102全站仪和南方NTS-662全站仪所需数据文件的格式。发现一个控制点的数据占一行,点名以及坐标和高程之间用逗号分隔,即如下格式:

点名,测量坐标Y,测量坐标X,高程H。

这样的数据格式,能够被两种型号的全站仪所接受。

了解数据文件的格式后,开始构思程序的功能。它要能够应用于本单位的Auto CAD图,也要能够应用于其他单位的Auto CAD图。这就要通过鼠标拾取图中的控制点号、高程、控制点符号。应用数据库操作函数,提取控制点号、坐标和高程,按照上面要求的格式写入到指定的数据文件中。为了增强程序的通用性,要使用基本的Auto LISP函数和Auto CAD命令,以保证能在Auto CAD 2000以上版本正确运行。

下面就是能够自动形成控制点成果数据文件程序的全部代码:

(defun c:srcz(/b1 b2 b3 c1 c2 c3 bh h h1 w2 x y f2)

(setvar "osmode"(+ 64 32 4)) (alert "控制点文件保存到 d:\\文件夹下。")

(command "layer" "n" "标记" "c" 1 "标记" "" "layer" "s" "标记" "")

(setq w2(getstring "\n 输入文件名 : "))

(alert "\n 拾取控制点号和高程后回车 ,然后再拾取控制点标志。")

(if (=w2 "")(setq w2"d:\\KONGZHI.TXT" f2(open w2 "w"))

(setq w2(strcat "d:\\" w2 ".txt") f2(open w2 "w"))

(setq bh(ssget) p(getpoint "\n 拾取控制点坐标( 圆心 交点 插入点) : "))

(while bh

(if (/= bh nil)

(progn

(setq y(car p) x(cadr p) x(rtos x 2 4) y(rtos y 2 4)

b1(ssname bh 0) b2(entget b1) b3(cdr (assoc 1 b2))

c1(ssname bh 1) c2(entget c1) c3(cdr (assoc 1 c2))

(princ b3 f2)(princ ",," f2)(princ y f2)

(princ "," f2) (princ x f2)(princ "," f2)

(princ c3 f2) (princ "\n" f2)

(setvar "osmode" 0) (command"CIRCLE" p 1)

)(setvar "osmode" (+ 32 4))

(if (/= bh nil) (setq bh(ssget) p(getpoint "\n 拾取控制点坐标( 圆心 交点 插入点) : "))

(setq bh nil)

) (close f2)

(command "layer" "s" "0" "") (setvar "osmode" 0) (princ)

熟悉Auto LISP语言的同行都知道,要想运行任何Auto LISP程序,都必须在运行之前加载。加载的方法有多种,可以根据个人的喜好而定。我习惯于将所有自己开发的程序都放在ACAD.LSP文件里,并将此文件所在的文件夹,设置在Auto CAD支持文件的搜索路径里。这样,每次启动Auto CAD,都能够自动加载此文件,使自己编写的程序随时都可以使用。

上面提供的程序加载后,你随时可以在命令行键入SRCZ就可启动它。程序运行后,首先提示输入文件名,本程序提供了缺省文件名“KONGZHI.TXT”,空回车既可采用此名。然后出现提示框“拾取点号和高程后回车,然后再拾取控制点坐标”,按提示去做就行了。在拾取控制点标志以获取控制点坐标时,将提示能够自动拾取控制点标志的“圆心、交点、插入点”。这几种点捕捉方式,基本上涵盖了控制点标志标示点位的方式,这使得该程序能够应用于各单位的Auto CAD图。此程序能够自动建立“标记”层,在所拾取的控制点位处画上一直径为2的红圆,并放在此层。用以检查所拾取的控制点位是否正确,还可避免重复拾取控制点。所需的控制点都拾取完毕后,以连续两次的空回车,即可结束程序的运行。退出程序后,您所需要的控制点数据文件,已自动保存到了D盘上。

下面是程序运行后得到的控制点数据文件,为节省篇幅只列出了一小部分。

II01,,475678.908,4389450.387,23.234

II02,,475586.983,4389598.346.24.087

II03,,475705.673.4389708.567,24.231

上述的控制点数据文件,要在全站以上使用,还要根据不同的全站仪,做出不同的操作。对于南方NTS-662全站仪来说,只要将上面的数据直接粘贴到南方的传输软件里,直接上传到全站仪里即可。对Leica TCR1102全站仪来说要复杂一些,下面简要说明一下:

运行Leica的“坐标编辑器”,打开您刚刚形成的控制点数据文件→选“自由各式” →下一步→分隔符选“逗号”→下一步→ 右健在“0”列上选“点号”→右健在“2”列上选 “坐标Y”→右健在“3”列上选“坐标X”→右健在“4”列上选“坐标H”→下一步→完成→文件→另存为→选路径,输文件名,保存文件的格式选“GSI-16文件(*.GSI)”→关闭坐标编辑器,启动Leica的“数据交换管理器”,将刚刚形成的GSI格式文件传至全站仪。

以上所介绍的就是我怎样利用Auto LISP程序建立数据文件的方法,愿意与大家分享。我更希望的是,能够得到同行们的先进方法,以提高我们的工作效率。

参考文献

[1] 章忆文.AutoLISP程序员参考手册[M].北京:海洋出版社,1991,5.

[2] 王爱民,于冬梅,史国生,等.编著.中文版AutoCAD.2002高级应用技巧[M].北京:清华大学出版社,2001,9.