Delphi实现Topcon全站仪自动展点
2016-05-30吴晓峰徐景欣王大伟
吴晓峰 徐景欣 王大伟
摘 要:随着现代电子测量技术日新月异的发展,Topcon全站仪以其较高的性价比被广泛用于测绘行业,操作简单易学,数据结构科学合理。由Borland公司推出的Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具,它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言、当今世界上最快的编译器、最为领先的数据库技术。该文结合Topcon测图数据,利用Delphi实现了数据下载、预处理、展点一系列方法。
关键词:Topcon 数据格式 展点 Delphi 测绘
中图分类号:TP3 文献标识码:A 文章编号:1674-098X(2016)06(b)-0082-03
1 Topcon数据存储格式
拓普康内存中的数据分测量坐标数据文件和坐标数据文件,前者是数据采集模式下生成的文件,在仪器中用“M”标识;后者是为放样模式准备的坐标文件,在仪器中用“C”标识。对两者数据下载后进行分析,测量数据所记录的信息是完整的测量信息,反映的是测量的过程与采集成果,而坐标数据文件相对简单,是点的坐标记录集合。以下分别截取一个测量数据和坐标数据片断,“//”后为注释。
JOB Z08010, //数据采集文件名
INST GTS-330 Ver.3.30 //仪器型号、内置系统版本
UNITS M,D //单位,此处为米、度
STN T44,0.000, //测站标识 测站点号 仪器高
XYZ 504882.246,3803796.484,0.000 //测站坐标标识 测站点N、E、Z值
BS T45,0.000 //后视标识 后视点号 棱镜高
XYZ 504888.430,3803837.337,-1.992 //后视坐标标识 后视点N、E、Z值
SS 1,0.000,FW //前视测点标识 前视点号 棱镜高 测点标识码
XYZ 504853.177,3803776.161,1.469 //前视坐标标识 前视测点N、E、Z值
SS 2,0.000,L
XYZ 504854.387,3803776.077,1.864
……
1,1125.057,1122.351,50.413,L //前视点号 前视测点N、E、Z值,测点标识码
2,1132.123,1126.359,50.744,FW
……
2 数据下载
配合全站仪使用的下载工具一般由厂家提供,比如拓普康的T_COM软件,但这种软件输出的数据格式是由软件提供者控制的,在操作与使用环节上用户难以根据自己的需要灵活定制。在Delphi开发平台上,数据下载功能可以借助Spcomm控件实现,与数据通信相关的几个重要属性:端口CommName、波特率BaudRate、数据位ByteSize、奇偶位ParityCheck、停止位StopBits,这些属性既可以在程序设计过程中指定,也可以在程序运行期间指定。
电脑与仪器通信参数要保持一致。通过激发数据下载动作,执行事件
procedure
TfrmDataChg.Comm1ReceiveData(Sender:Tobject;Buffer:Pointer;Buffer Length: Word);
var
s: string;
begin
SetLength(s, BufferLength);
Move(Buffer^, pchar(s)^, BufferLength);
memo1.Lines.Add(s);
end;
下载的数据是可识别ASSIC格式,显示在Memo1控件中,可以进一步保存或处理。
3 数据预处理
在对数据文件格式及各组成部分含义明确理解的情况下,使用高级程序语言进行数据文件信息的提取、分离、处理。该文利用Delphi对数据进行读取与处理。
3.1 算法设计
程序的主要算法是:打开测量数据文件,逐行读取数据行,查找标识“XYZ”行并定位,以其为参照向前一行定位,查找行首标识“STN、BS、SS”并判断该行性质,对本行进行信息分离、提取。
3.2 程序实现
(1)文件的打开,利用Delphi中的OpenDialog控件。
If OpenDialog1.Execute then filename:=OpenDialog1.FileName;
(2)逐行读取数据文件,使用语句Readln(file,LineStr),同时创建Tstringlist对象,用于保存读入的数据行,每读一行,stringlist自动加一。
(3)设计循环变量i,查找“XYZ”,使用语句If Pos('XYZ',Strings[i])>0来判断,如果为真值表示找到坐标数据行,分离坐标与编码。
(4)向前定位至Strings[i-1],使用语句If Pos('STN',Strings[i-1])>0 来判断是否为测站,使用语句If Pos('BS',Strings[i-1])>0 来判断是否为后视定向点,使用语句If Pos('SS',Strings[i-1])>0来判断是否为前视点,确定本行性质后对元素进行分离、提取。
(5)将(3)、(4)分离出来的信息进行拼装,形成坐标记录。
4 CAD展点
通过前面的工作,已经完成了从原始数据到整理后的带编码坐标数据,下面介绍利用Delphi将坐标数据展点到CAD文件中。CAD展点的实质是向CAD模型空间输入文本或插入块。Delphi是借助Com技术实现的,使用CreateOleObject将启动AutoCad,然后以Ole方式对AutoCad进行控制。具体步骤如下:
(1)在Delphi中定义Ole变量。
var
obj_Acad,obj_ModelSpace,obj_ActiveDoc,Ole_point,obj_lays,obj_lay,obj_TestStyle,obj_TextStyles,obj_txt,obj_blk,obj_att: OleVariant;
(2)创建Ole对象。
obj_Acad:=CreateOleObject('AutoCad.Application');
(3)取得当前文档与模型空间。
obj_ActiveDoc:= obj_acad.activedocument;
obj_ModelSpace:=obj_ActiveDoc.ModelSpace;
(4)创建图层并置为活动图层。
obj_lays:=obj_activedoc.layers;
obj_lay:=obj_lays.add('points');
obj_activedoc.activelayer:=obj_lay;
(5)定义输入文本样式。
obj_TextStyles:=obj_ActiveDoc.TextStyles;
obj_TestStyle:=obj_TextStyles.Add('SBD');
obj_TestStyle.FontFile:='txt.shx';
obj_TestStyle.width:='0.8';
obj_ActiveDoc.activeTextStyle:=obj_TestStyle;
(6)定义插入点,获取坐标。
Ole_point:=VarArrayCreate([0,2],VT_R8);
Ole_point[0]:=py;Ole_point[1]:=px;Ole_point[2]:=pz;
(7)插入文本,完成展点。
txt:=pno+pcode; //点名与编码
obj_txt:=obj_ModelSpace.AddText(txt,VarArrayRef(Ole_Point),edit4.Text );
obj_txt.color:=clrindex;
(8)对所有坐标点进行循环。
特别注意的是,拓普康下载数据会有“舍弃”大数的模式,比如点128,3572191.473,509150.692,-1.474,ZL,下载的结果可能是128,72191.473,9150.692,-1.474,ZL,这时要通过程序X加3500000Y加500000进行修正。
5 结语
拓普康全站仪操作简单,精度可靠,记录方便,对其数据格式的理解有助于后续的数据处理工作。该文介绍了一种实用的数据读取算法并依据此算法进行程序化,同时针对生产中经常进行CAD展点,介绍了如何用CAD外部语言实现的方法。
参考文献
[1] 李向东,刘学杰,伍顺运.Topcon全站仪内存在测绘中的应用[J].北京测绘,2003(1):37-39.
[2] 田春来,邢炜光,邢卫民,等.全站仪数据格式转换程序的设计与实现[J].测绘通报,2008(9):67-69.
[3] 赵晋睿,苏宗跃.拓普康GTS-600型全站仪原始数据的处理[J].甘肃科技,2009,25(8):28,49-50.
[4] 张永林,杜军和.VisualBasic编写拓普康通讯程序[J].城市勘测,2006(6):26-28.