基于VB的高精度电子水准仪观测数据处理俞礼彬摘要:高精度电子水准仪观测数据处理软件可以处理拓普康DL101C,天宝DINI12,徕卡DNA03原始观测文件数据,将原始观测文件读取进入处理软件,经过复杂的运算处理后,提取出有效数据,完成水准观测数据预处理的工作,接着进行数据检验,用户更可以根据工程需要设置测站限差,然后生成5种手簿格式或根据用户需要的格式,生成水准概算表,进行网平差。
软件注重软件实际应用,提供良好的可视化界面,增加用户使用的灵活性,提高软件应用的大众化,以便于实现电子水准仪内外业一体化。
关键词:电子水准仪,原始观测数据,数据检验,水准数据处理Abstract: High precision electronic level observation data processing software can handle the Topcon DL101C, in the DINI12, Leica DNA03original observation data, the original observation file read into the after treatment software, through a complicated arithmetic processing, extracting the effective data, standard data pre-processing work, followed by a gross error detection. According to need ,user can set the station tolerance, then the data processing software generates5 kinds of hand book format or format for meeting the user’s need, and then it generates level estimate table, finally the data processing software achieve the level of adjustment calculation. Leveling data processing software pays attention to the software application, provides good visualization interface, increases user flexibility, improves software application popularization. So the software can realize the electronic level inside and outside the industry integration.Key words: electronic level, leveling, post processing1 软件的需求分析电子水准仪是一种新型的测绘仪器,在精密测量中得到应用,并将成为未来的水准仪的发展趋势。
电子水准仪自动记录数据,速度快,精度高,读数客观,实现了水准测量的数字化,自动化。
但是电子水准仪的品牌不同,其下载下来的原始观测文件格式各不相同,且原始观测文件格式比较复杂,不符合国内规范要求,对水准测量处理造成了一定的困难。
所以当前对电子水准仪处理研究普遍功能不完善,形式单一,处理过程过于简单,适用性不强,多数只能适用于一种情况,因而不能真正实现电子水准仪内外业一体化,不利于电子水准仪的普及和推广。
本文针对天宝,徕卡,拓普康三种电子水准仪,基于VB编写软件处理其原始观测数据,生成五种格式的成果文件,大幅度提高了精度,提供了高精度处理各种电子水准仪数据的范例,有利于解决当前各种电子水准仪处理软件不统一的情况,解决水准测量数据处理落后的低效率的人工模式,实现水准测量的数据处理的数字化,快速化,规范化。
2 软件设计与实现2.1 设计软件框架软件按照水准测量数据处理的过程,软件总体由七大模块构成:参数设置模块,数据读取模块,数据检验模块,成果显示与导出模块,平差模块。
先进行软件参数设置,设置导出格式,数据处理精度,然后导入原始观测数据(有.txt,.dat,.dll 格式的文件),进行数据处理与检验,最后生成水准手簿显示并导出成果(有.xls 表格,.txt文本文件),进行水准网平差。
软件设计完整框架如图1所示。
2.2 软件界面设计在软件设计过程中,首先利用Visual Basic 6.0的有关控件构建软件的界面,导入,设置,检验,导出等窗口和命令按钮,并根据日常处理水准数据的人工模式编写代码,经过不断调试和改进,力求提高精度,操作灵活性,软件的完整性。
软件界面如图1所示。
在读取数据之前需要设置各种参数,如测量仪器,测量等级与文件导出格式,设计界面如图3所示。
为了提高精度和方便用户自行设置精度,软件加入了水准测量限差设置界面,如设置视线长度限差,视线高度限差,前后视距差限差......2.3 算法思想与程序设计在整个程序设计中,关键有两个问题:一是如何读取电子水准仪原始观测文件中的有效数据,剔除重测数据及附加的信息;二是如何对各种电子水准仪数据进行高效处理,如拓普康和徕卡的数据不会发生叠加或者混合。
通过对徕卡,拓普康,天宝电子水准仪数据格式的研究,找到文件数据格式的规律,如天宝DINI12文件中“Start-Line”表示开始测量,“aBFFB”表示该测段等级是二等,即先后前前后,再前后后前的模式向前推进,若是“BFFB”则表示该测段等级是三等,若是“BBFF”则表示该测段等级是四等。
通过While循环读取测站和测段信息,将有效的水准数据提取出来,形成一个“预处理”的txt文件,作为一个数据导入的接口,然后进行后台数据处理,按照国家水准测量规范,设置各个数据的格式,如后距,前距,中丝读数等,计算出视距差,视距差累计,两次中丝读数之差,测站高差以及测段前距,后距,视距差……,并设置数据格式,赋给各个变量和数组,以便于后续程序设计时数据的调用;在设计数据检核模块时,要对一、二、三、四等检验,根据国家水准测量规范,用条件语句检验各个变量是否符合规范,如果数据超限或出错,在该数据的变量上做上标记符,以便于后续识别;在设计成果显示模块时,设计窗体界面手簿网格,采用MSFlexGrid控件,设计分两部分,设计水准手簿头部分,这部分需要软件自动输入测量阶段的信息,另外设计数据部分,包括各个测站和测段数据;再设计成果输出部分,输出文件有五种形式,分别是3种Excel表格和2种txt文本,这里主要是对输出格式进行设置,采用VBA设计时调用各个变量和数组中的数据,逐次打印,最后输出水准概算表。
在基本程序设计完成之后,需要不断加以调试和优化,在多次运行程序没有数据错误和软件错误后,要提高程序运行的速度,简化代码,提高程序的使用灵活性。
2.5 软件的核心代码Public Sub DNA03Input() '徕卡DNA03原始观测文件输入Dim line As String, timestr As String, CPoint(1000) As String, t As IntegerDim m As Integer, X As Integer, c As Integer, i As Integer, x1 As Integer, x2 As Integer, x3 As Integer, x4 As Integer, Ctime(1000) As StringDim k1 As Integer, k2 As Integer, k3 As Integer, k4 As Integer, k5 As Integer, k6 As Integer, K As Integer’设置后距1,后距2,前距1,前距2,后尺中丝读数1,后尺中丝读数2,前尺中丝读数1,前尺中丝读数2Dim BD1(1000) As Double, BD2(1000) As Double, FD1(1000) As Double,FD2(1000) As Double, BC1(1000) As Double, BC2(1000) As Double, FC1(1000) As Double, FC2(1000) As DoubleDim bpoint(1000) As String, fpoint1(1000) As StringX = 1c = 1x1 = 0x2 = 0x3 = 0x4 = 0t = 0’导入徕卡DNA03文件Open monDialog1.FileName For Input As #1’打开预处理文件Open App.Path& "\预处理.txt" For Output As #3Do While Not EOF(1)Line Input #1, line ’一行一行读取文件中的数据i = 0m = 0For j = 1 To 6m = InStr(m + 1, line, "=")If m <> 0 Then i = i + 1Next jIf i = 6 Then’读取水准观测开始与结束时间FirTime(c) = Right(line, 10)FirTime(c) = Mid(FirTime(c), 3, 2) & Mid(FirTime(c), 6, 2) & Mid(FirTime(c), 9, 2) LasTime(c) = FirTime(c)End Ifm = 0K = 0’循环记录需要提取数据的准确位置For j = 1 To 6m = InStr(m + 1, line, ",")If m <> 0 Then K = K + 1If K = 1 Then k1 = mIf K = 2 Then k2 = mIf K = 3 Then k3 = mIf K = 4 Then k4 = mIf K = 5 Then k5 = mIf K = 6 Then k6 = mNext j’开始循环读取各测段中指定位置的有效测站数据,如前距,后距,中丝读数If K = 6 Thent = t + 1CPoint(t) = Left(line, k1 - 1)If Mid(line, k2 - 2, 2) = "B1" Thenx1 = x1 + 1bpoint(x1) = Mid(line, 3, 8)BC1(x1) = Val(Mid(line, k2 + 1, 10))BD1(x1) = Val(Mid(line, k3 + 1, 10))Ctime(x1) = Mid(line, k5 + 1, 8)End IfIf Mid(line, k2 - 2, 2) = "F1" Thenx2 = x2 + 1fpoint1(x2) = Mid(line, 3, 8)FC1(x2) = Val(Mid(line, k2 + 1, 10))FD1(x2) = Val(Mid(line, k3 + 1, 10))End IfIf Mid(line, k2 - 2, 2) = "F2" Thenx3 = x3 + 1FC2(x3) = Val(Mid(line, k2 + 1, 10))FD2(x3) = Val(Mid(line, k3 + 1, 10))End IfIf Mid(line, k2 - 2, 2) = "B2" Thenx4 = x4 + 1BC2(x4) = Val(Mid(line, k2 + 1, 10))BD2(x4) = Val(Mid(line, k3 + 1, 10))End IfEnd IfIf line = "水准线路总结" ThenPrint #3, cFor j = 1 To x1Print #3, j; ","; BD1(j); ","; BD2(j); ","; FD1(j); ","; FD2(j); ","; BC1(j); ","; BC2(j); ","; FC1(j); ","; FC2(j)Next jFirTime(c) = FirTime(c) &Left(Ctime(1), 2) & Mid(Ctime(1), 4, 2)LasTime(c) = LasTime(c) &Left(Ctime(x1), 2) & Mid(Ctime(x1), 4, 2)FPoint(c) = bpoint(1)LPoint(c) = fpoint1(x1)CeZhan(c) = x1c = c + 1x1 = 0x2 = 0x3 = 0x4 = 0t = 0End IfLoopClose #1Close #3End Sub2.4 软件的实现(1)进入软件后,单击“参数设置”按钮,显示是“设置”对话框,对仪器,水准等级,成果导出模式设置,设置完成后,单击“保存”,再单击“返回”,回到主软件;在设置“测量等级”时,可以单击“高级”,软件显示“测量限差设置”对话框,这里可以手动输入限差,单击“保存”,再单击“返回”,回到“设置”对话框;(2)在主界面上,单击“文件读取”,选择你所需要读取的水准观测原文件,单击确定;读取完成后,返回到主软件,主界面显示原文件内容;(3)在主界面上,单击“数据检验”,返回“数据检验完毕”对话框,单击“确定”;(4)在主界面上,单击“成果显示”,主界面显示水准观测手簿,其中绿色背景的数据表示该数据超限;(5)在主界面上,单击“导出成果”,主软件显示“Excel1模式:文件输出完毕!”对话框,单击“确定”,显示Excel1模式的水准观测手簿;如果想要以Excel2模式显示,可以重新单击“参数设置”,重新选择“Excel2模式”,再单击“导出成果”,则成果以Excel2模式显示,类似地,其他模式也可以这样操作;(6)在主软件界面上单击工具栏上的“概算表”,软件就会输出水准概算表,显示水准概算表输出完毕对话框。