VB6.0程序在全站仪图根导线测量中的应用
2014-09-24吴吕稳
吴吕稳
摘要:充分利用全站仪的各种功能,用“VB6.0”编写的程序直接对全站仪观测的记录数据进行分析处理,并生成平差文件和观测手簿,达到内外业一体化图根导线测量。
关键词:全站仪;VB6.0;图根导线观测;数据格式处理;数据检查处理
中图分类号:C37文献标识码: A
1 前言
全站仪在地形、地籍测量中的广泛应用,使图根导线观测更加准确、快捷,但大部分的导线平差软件还不支持与全站仪直接进行数据交换,平差计算还需要人工对全站仪的观测数据进行整理计算、手工录入,不仅费时费力,还容易产生粗差。
全站仪具有测距测角自动记录及传输数据的自动化的功能,本文以topcon系列全站仪为例,利用“VB6.0”编写的程序,对观测数据进行分析处理,并进行转换、检查,最终生成清华山维nasew95格式的平差文件及Word格式的导线平差文件。
2 全站仪观测数据格式
topcon全站仪以测量模式输出的原始观测数据文件一般有两种,见表1,表2。
表1 斜距(SD)模式
? +01178481 m 0852030 +1203040 d 01174572
ID SD m/f V H d/g/m HD
数据识别符 斜距 距离单位 垂直角 水平角 角度单位 平距
t 00 +00 +25 099 EXT(CRLF)
t/* L P O BCC
倾斜改正(t打开,*关闭) 0值 大气改正数 棱镜常数 块较验符 结束符
表2平距/高差(HD/VD)模式
R +01174572 m 0852030 +1203040 d 01174572
ID HD m/f V H d/g/m HD
数据识别符 平距 距离单位 垂直角 水平角 角度单位 平距
t 00 +00 -30 099 EXT(CRLF)
t/* L P O BCC
倾斜改正(t打开,*关闭) 0值 大气改正数 棱镜常数 块较验符 结束符
3 程序模块设计思想
程序分为“数据预处理”、“中间数据检查处理”和“平差文件、导线观测手簿”三部分。
“数据预处理”模块:利用VB程序读取全站仪观测数据文件,根据数据识别符对每测站的字符串进行分解,来获取各测站及观测方向点(点名、仪器高、方向名、水平角、垂直角、距离、目标高)信息,生成后缀为.ELE的中间文件(*.ELE文件为清华山维nasew95平差软件的外业数据观测格式)。*.ELE以文本格式保存,生成速度快、存取方便,生成的数据格式内容整齐、便于人工辩读及除去多余观测量。
表3中间文件数据格式
*A003,1.610
测站名,仪器高
004,HZS,000.0000,090.2454,00083.671,1.194
测站,模式,水平角,垂直角,距离,目标高
002,HZS,244.0324,090.0415,00084.636,1.194
----
盘左盘右分隔符
A002,HZS,064.0307,269.5542,00084.636,1.194
A004,HZS,179.5943,269.3453,00083.671,1.194
“中间数据检查处理”:调用Microsoft Access软件将*.ELE文件导入到数据库中,计算2C、指标差、高差等计算量,使用SQL语言对测站的盘左盘右方向名是否相同、2C、指标差、对向边长、对向高差等精度进行检查并生成报表;
“平差文件、导线观测手簿”:对通过“中间数据检查处理”的*.ELE文件,从Access数据库中提取所需数据,在已知点数据文件中提取已知点生成*.MSM文件,直接调用清华山维nasew95程序打开进行平差计算。平差文件直接加载了已知点数据,减少了人为输入产生的错误。
提取Access中的观测数据,在Word软件中生成导线观测手簿(表四),便于后期资料整理。
表四图根导线观测手簿
4 程序代码
4.1数据预处理
(1)导线参数设定
Load Dialog1
Dialog1.Show vbModal‘调用参数设置对话窗体
Open App.Path & "daoxian.lyb" For Random As #1 Len = Len(DaoXian)‘将导线设置参数写入到二进制文件中,方便调用。
Put #1, 1, DaoXian
(2)读取原始观测数据
CommonDialog1.ShowOpen ‘调用打开对话框
RichTextBox1.LoadFile CommonDialog1.Filename, rtfText ‘打开原始观测文件,读取文件内容到文本框内
(3)数据转换(生成*.ELE文件)
TempStr = QuWei(TempStr)‘调用函数去掉文本中的CRLF、EXT和块较验符
利用循环语句对每测站进行读取
Cz = StrHead(TempStr, "_'") ‘测站信息
If InStr(ch, "_?+") > 0 Then‘判断边长测量模式
………
对字符串进行分解,根据设置的参数重新组合得到测站的方向点点名、距离、垂直角、水平角、目标高。
End If
RichTextBox1.Text=“”‘清空文本框中的内容
RichTextBox1.Text=NewTempStr ‘将处理好的文本写入到文本框中
CommonDialog1.ShowSave‘弹出保存对话框
RichTextBox1.SaveFile CommonDialog1.Filename, rtfText
4.2 中间数据检查处理
读取*.ELE文件→Access→数据检查
(1) *.ELE文件导入Access
Set db = OpenDatabase(App.Path & "Traverse.mdb") ‘设置数据库
db.Execute "INSERT INTO [测站](ID,测站名,仪器高,文件号) VALUES(CZGC)"‘读入测站信息。
db.Execute "INSERT INTO [方向点](ID,方向名,水平角盘左,垂直角盘左,边长读数1,觇标高,文件号)VALUES(FXGCPZ)" ‘读入观测方向信息。
(2)各项检查常数计算
Set RS = db.OpenRecordset("select * from 方向点 where 文件号=1" )
RS.Edit
RS.Fields(4).Value = (DMS(DEG(RS.Fields(2).Value) - (DEG(RS.Fields(3).Value) - DEG(180)))) * 10000 ‘计算指标差
RS.Fields(5).Value = DMS(DEG(RS.Fields(2).Value) - DEG(RS.Fields(4).Value / 20000)) ‘计算2C
RS.Fields(6).Value = DMS(DEG(RS.Fields(5).Value) - DEG(Val(Gl)))‘计算水平角中值
RS.Update
(3)数据检查
Set RS = db.OpenRecordset(select测站.ID,测站名, 方向名,指标差 from 方向点,测站 WHERE 测站.ID=方向点.ID and abs(指标差)>" & ZBC & " and 方向点.文件号=1") ‘检测指标差。
Set RS = db.OpenRecordset("select测站.ID,测站名, 方向名,边长读数1,读数2 from 方向点,测站 WHERE 测站.ID=方向点.ID and abs(边长读数1-读数2)>" & BC & " and 方向点.文件号="1) ‘边长检测。
Set RS = db.OpenRecordset("select测站.ID,测站名, 方向名,高差,平距 from 中值,测站 WHERE 测站.ID=中值.ID and 测站.文件号=1")‘读取测站观测信息。
RS .Fields(2).Value = Cz And RS.Fields(1).Value = fx And Abs(RS.Fields(4).Value - Zjl) > PingJu ‘对向距离检查。
Abs(Val(RS.Fields(3).Value) + Zgc) > GC * Sqr(Val(RS.Fields(4).Value) * 0.001) ‘对向高差检查。
4.3平差文件、导线观测手簿
(1)平差文件
Set RS = db.OpenRecordset("select测站.ID,测站名, 方向名,水平角,高差,平距 from 中值,测站 WHERE 测站.ID=中值.ID")‘读取水平角、高差、平距信息。
RS.MoveFirst
Do Until RS.EOF
‘对每行记录进行分解后,存在相应的字段。
RS.MoveNext
Loop
Shell App.Path & "NASEW.EXE " & FILSAVE, vbNormalFocus '调用平差软件直接打开平差文件
(2) 导线观测手簿
Set wdApp = CreateObject("Word.Application")‘调用Word程序
Set wdbok = wdApp.Documents.Open(App.Path & "图根导线观测手簿.doc")‘调用模板文件
Set wdBook = wdApp.Documents.Add‘新建word文件
Set RS = db.OpenRecordset("select测站.ID,测站名, 仪器高, 方向名, 水平角盘左, 水平角盘右, RC, 方向值, 水平角中数, 垂直角盘左, 垂直角盘右, 指标差, 垂直角, 觇标高, 边长读数1, 读数2, 边长值 from 方向点,测站 WHERE 测站.ID=方向点.ID and 测站.文件号=1" ) ‘导线观测手簿的信息
RS.MoveFirst
Do Until RS.EOF
With wdBook.Tables(TabCount)
.Cell(i, 2).Range.InsertAfter Format(RS.Fields(3).Value, ">") '方向名
.Cell(i, 3).Range.InsertAfter Replace(Format(RS.Fields(4).Value, "###0.00 00"), ".", " ") '水平角盘左
………将读取的数据填入到WORD表格中
End With
RS.MoveNext
Loop
wdBook.Save保存文件
wdBook.Close关闭文件
wdbok.Close关闭模板文件
wdApp.Quit退出Word程序
5 结束语
全站仪内外业一体化图根导线测量减少了听、写、计算、录入等人工环节,避免了因为人工记录或录入造成的粗差,此种作业方法成本低,简便易行,作业成果准确可靠,大大的减轻测量人员的劳动强度,更好的提高测绘工作效率和产品质量。
参考文献:
[1] 赵学慧,赵玮.Visual Basic 程序开发完整实例教程.北京.海洋出版社,2003.
[2] 王成春,萧雅云.Access 2003 VBA程序设计.北京.中国铁道出版社,2005.