论文部分内容阅读
摘 要:本文以天宝DiNI03数字水准仪为例讲述了利用数字水准仪内存功能存储野外采集的数据资料,下载至计算机后,经Visual Basic程序转换成Microsoft Excel表格文件的过程。
关键词:工程测量 数字水准仪Excel数据格式转换
1.概述
传统水准测量的作业方式需要人肉眼读数、手工记录,工作较繁琐,已无法满足行业对测量成果的程序化、标准化、信息化、快速化的需求。为了应对这种需求,提高现行水准作业的工作效率和成果精度,数字水准仪应运而生。它代替精密光学水准仪进行作业,即节省了人力,也大大提高了作业效率。
数字水准仪是在自动安平水准仪的基础上发展起来的,采用条纹编码标尺和数字影像处理原理,用CCD图像传感器替代观测员的肉眼,将望远镜像面上的标尺成像转换成数字信息,再利用数字图像处理技术识别标尺条码进而获得标尺读数和视距。它的出现是水准测量技术一次大的突破。
目前市场占主导地位的数字水准仪有天宝的DiNi系列、徕卡的DNA系列、索佳的SDL系列、拓普康的DL系列。观测存储的数据输出后,大都不是可以直接用于计算的数据格式,而是夹杂着许多冗余信息的文本文件。针对这一情况,应用VB语言编制转换程序,很容易实现数字水准仪观测数据的提取,并将其转换成能易被阅读,便于使用的Excel表格数据。
Excel 是Microsoft Office办公组件之一,为用户提供表格应用,有各种公式和函数,能处理数据和文本的公式、逻辑公式、数组公式、图标及数据透视表、宏及VBA 的自定义函数。这些工具使表格计算工作变得更加简单、方便、明了。
2.基本构思
由于在数字水准仪的外业记录数据格式中往往会伴随许多无用的信息,那么怎样跳过无用的信息,将有用的信息读出并写入Excel相应表格中?这就是本文所要解决的问题—通过查找文件中的关键字如:观测模式、需复测数据、后视、前视、结束符和文件结束符等来提取有用数据,将有用的信息逐一提取并按目标文件的要求格式写入Excel表格,再运用适当的循环语句来实现文件的正确读写。现以天宝DINI03数字水准仪下载的观测数据转换为Excel的观测记录表为例讲述数据转换程序的编写过程。
3.编程依据
3.1 Excel觀测记录表的格式
3.2 天宝DINI03数字水准仪的外业记录数据文件格式
只有将这些数据转换为EXCEL表格形式,才便于使用EXCEL的强大功能进行表格输出、简易平差计算和VBA程序进行数据的严密平差计算。
4.编程环境与程序流程
4.1编程环境
Visual Basic 是Microsoft 公司推出的可视化开发工具,具有丰富的功能和良好的性能,以其用户界面好、简单易学、调试方便和支持面向对象程序设计(OOP),成为许多软件开发人员的首选工具。本文也选用VB 作为编程环境。
4.2 程序流程
4.3程序主要代码
Set xlApp = CreateObject("Excel.Application"): xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Add: Set xlSheet = xlBook.Worksheets(1)
Open Text1.Text For Input As #1: flag = 0: Bf = 1: Ff = 1: i = 2
Do While Not EOF(1)
Line Input #1, TextLine: BFstyle = Mid(TextLine, 38, 5): If BFstyle = " BFFB" Or BFstyle = "aBFFB" Then SD = 2
BZF = Mid(TextLine, 50, 2)
If (Mid(TextLine, 30, 5) <> "#####") Then
If SD = 2 Then
If BZF = "Rb" Then
Select Case Bf
Case 1
DH1 = Trim(Mid(TextLine, 21, 9)):DS1 = Mid(TextLine, 60, 7): JL1 = Trim(Mid(TextLine, 83, 7)): Bf = 2
Case 2
DH2 = Trim(Mid(TextLine, 21, 9)):DS2 = Mid(TextLine, 60, 7): JL2 = Trim(Mid(TextLine, 83, 7)): Bf = 1
End Select
End If
If BZF = "Rz" Then DH3 = Trim(Mid(TextLine, 21, 9)):DS3 = Mid(TextLine, 60, 7): JL3 = Trim(Mid(TextLine, 83, 7)): Ff = 1
If BZF = "Rf" Then
Select Case Ff
Case 1
DH3 = Trim(Mid(TextLine, 21, 9)):DS3 = Mid(TextLine, 60, 7): JL3 = Trim(Mid(TextLine, 83, 7)): Ff = 2
Case 2
DH4 = Trim(Mid(TextLine, 21, 9)):DS4 = Mid(TextLine, 60, 7): JL4 = Trim(Mid(TextLine, 83, 7)): Ff = 1
End Select
End If
If Bf = 1 And Ff = 1 And (BZF = "Rz" Or BZF = "Rf") Then
Cells(i, 1).Select: ActiveCell.FormulaR1C1 = DH1
Cells(i, 2).Select: ActiveCell.FormulaR1C1 = Str(Round((Val(JL1) + Val(JL2)) / 2, 3))
Cells(i, 3).Select: ActiveCell.FormulaR1C1 =DS1
Cells(i, 4).Select: ActiveCell.FormulaR1C1 =DS2
Cells(i, 5).Select: ActiveCell.FormulaR1C1 = DH3
Cells(i, 6).Select: ActiveCell.FormulaR1C1 = Str(Round((Val(JL3) + Val(JL4)) / 2, 3))
Cells(i, 7).Select: ActiveCell.FormulaR1C1 =DS3
Cells(i, 8).Select: If BZF = "Rf" Then ActiveCell.FormulaR1C1 =DS4
Cells(i, 9).Select
If BZF = "Rf" Then ActiveCell.FormulaR1C1 = "=(RC[-6]+RC[-5]-RC[-2]-RC[-1])/2"
If BZF = "Rz" Then ActiveCell.FormulaR1C1 = "=(RC[-6]+RC[-5]-RC[-2]-RC[-2])/2"
i = i + 1
End If
End If
End If
Loop
Close #1: End
5.结束语
不同型号的数字水准仪的数据记录格式不尽相同, 所以不可能有一个固定不变的数据转换程序,应根据不同的仪器下载的观测数据格式编写不同的数据转换程序。因此,笔者仅希望这篇文章能起到一个抛砖引玉的作用。
参考文献
[1] 天宝DiNI数字水准仪使用指南V2.0,上海欧亚测量系统设备有限公司,2009年8月。
[2] John Walkenbach,中文版Excel 2007高级VBA编程宝典,冯飞、焦瑜净译,清华大学出版社,2009年2月。
作者简介:
廖东军,男,1975年生,工程师。1998 年毕业于西安工程学院,从事工程测量专业工作;
刘云锋,男,1974年生,工程师。2000 年毕业于长安大学,从事工程测量专业工作;
梁小龙,男,1979年生,工程师。2002 年毕业于焦作工学院,从事工程测量专业工作。
注:文章内所有公式及图表请以PDF形式查看。
关键词:工程测量 数字水准仪Excel数据格式转换
1.概述
传统水准测量的作业方式需要人肉眼读数、手工记录,工作较繁琐,已无法满足行业对测量成果的程序化、标准化、信息化、快速化的需求。为了应对这种需求,提高现行水准作业的工作效率和成果精度,数字水准仪应运而生。它代替精密光学水准仪进行作业,即节省了人力,也大大提高了作业效率。
数字水准仪是在自动安平水准仪的基础上发展起来的,采用条纹编码标尺和数字影像处理原理,用CCD图像传感器替代观测员的肉眼,将望远镜像面上的标尺成像转换成数字信息,再利用数字图像处理技术识别标尺条码进而获得标尺读数和视距。它的出现是水准测量技术一次大的突破。
目前市场占主导地位的数字水准仪有天宝的DiNi系列、徕卡的DNA系列、索佳的SDL系列、拓普康的DL系列。观测存储的数据输出后,大都不是可以直接用于计算的数据格式,而是夹杂着许多冗余信息的文本文件。针对这一情况,应用VB语言编制转换程序,很容易实现数字水准仪观测数据的提取,并将其转换成能易被阅读,便于使用的Excel表格数据。
Excel 是Microsoft Office办公组件之一,为用户提供表格应用,有各种公式和函数,能处理数据和文本的公式、逻辑公式、数组公式、图标及数据透视表、宏及VBA 的自定义函数。这些工具使表格计算工作变得更加简单、方便、明了。
2.基本构思
由于在数字水准仪的外业记录数据格式中往往会伴随许多无用的信息,那么怎样跳过无用的信息,将有用的信息读出并写入Excel相应表格中?这就是本文所要解决的问题—通过查找文件中的关键字如:观测模式、需复测数据、后视、前视、结束符和文件结束符等来提取有用数据,将有用的信息逐一提取并按目标文件的要求格式写入Excel表格,再运用适当的循环语句来实现文件的正确读写。现以天宝DINI03数字水准仪下载的观测数据转换为Excel的观测记录表为例讲述数据转换程序的编写过程。
3.编程依据
3.1 Excel觀测记录表的格式
3.2 天宝DINI03数字水准仪的外业记录数据文件格式
只有将这些数据转换为EXCEL表格形式,才便于使用EXCEL的强大功能进行表格输出、简易平差计算和VBA程序进行数据的严密平差计算。
4.编程环境与程序流程
4.1编程环境
Visual Basic 是Microsoft 公司推出的可视化开发工具,具有丰富的功能和良好的性能,以其用户界面好、简单易学、调试方便和支持面向对象程序设计(OOP),成为许多软件开发人员的首选工具。本文也选用VB 作为编程环境。
4.2 程序流程
4.3程序主要代码
Set xlApp = CreateObject("Excel.Application"): xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Add: Set xlSheet = xlBook.Worksheets(1)
Open Text1.Text For Input As #1: flag = 0: Bf = 1: Ff = 1: i = 2
Do While Not EOF(1)
Line Input #1, TextLine: BFstyle = Mid(TextLine, 38, 5): If BFstyle = " BFFB" Or BFstyle = "aBFFB" Then SD = 2
BZF = Mid(TextLine, 50, 2)
If (Mid(TextLine, 30, 5) <> "#####") Then
If SD = 2 Then
If BZF = "Rb" Then
Select Case Bf
Case 1
DH1 = Trim(Mid(TextLine, 21, 9)):DS1 = Mid(TextLine, 60, 7): JL1 = Trim(Mid(TextLine, 83, 7)): Bf = 2
Case 2
DH2 = Trim(Mid(TextLine, 21, 9)):DS2 = Mid(TextLine, 60, 7): JL2 = Trim(Mid(TextLine, 83, 7)): Bf = 1
End Select
End If
If BZF = "Rz" Then DH3 = Trim(Mid(TextLine, 21, 9)):DS3 = Mid(TextLine, 60, 7): JL3 = Trim(Mid(TextLine, 83, 7)): Ff = 1
If BZF = "Rf" Then
Select Case Ff
Case 1
DH3 = Trim(Mid(TextLine, 21, 9)):DS3 = Mid(TextLine, 60, 7): JL3 = Trim(Mid(TextLine, 83, 7)): Ff = 2
Case 2
DH4 = Trim(Mid(TextLine, 21, 9)):DS4 = Mid(TextLine, 60, 7): JL4 = Trim(Mid(TextLine, 83, 7)): Ff = 1
End Select
End If
If Bf = 1 And Ff = 1 And (BZF = "Rz" Or BZF = "Rf") Then
Cells(i, 1).Select: ActiveCell.FormulaR1C1 = DH1
Cells(i, 2).Select: ActiveCell.FormulaR1C1 = Str(Round((Val(JL1) + Val(JL2)) / 2, 3))
Cells(i, 3).Select: ActiveCell.FormulaR1C1 =DS1
Cells(i, 4).Select: ActiveCell.FormulaR1C1 =DS2
Cells(i, 5).Select: ActiveCell.FormulaR1C1 = DH3
Cells(i, 6).Select: ActiveCell.FormulaR1C1 = Str(Round((Val(JL3) + Val(JL4)) / 2, 3))
Cells(i, 7).Select: ActiveCell.FormulaR1C1 =DS3
Cells(i, 8).Select: If BZF = "Rf" Then ActiveCell.FormulaR1C1 =DS4
Cells(i, 9).Select
If BZF = "Rf" Then ActiveCell.FormulaR1C1 = "=(RC[-6]+RC[-5]-RC[-2]-RC[-1])/2"
If BZF = "Rz" Then ActiveCell.FormulaR1C1 = "=(RC[-6]+RC[-5]-RC[-2]-RC[-2])/2"
i = i + 1
End If
End If
End If
Loop
Close #1: End
5.结束语
不同型号的数字水准仪的数据记录格式不尽相同, 所以不可能有一个固定不变的数据转换程序,应根据不同的仪器下载的观测数据格式编写不同的数据转换程序。因此,笔者仅希望这篇文章能起到一个抛砖引玉的作用。
参考文献
[1] 天宝DiNI数字水准仪使用指南V2.0,上海欧亚测量系统设备有限公司,2009年8月。
[2] John Walkenbach,中文版Excel 2007高级VBA编程宝典,冯飞、焦瑜净译,清华大学出版社,2009年2月。
作者简介:
廖东军,男,1975年生,工程师。1998 年毕业于西安工程学院,从事工程测量专业工作;
刘云锋,男,1974年生,工程师。2000 年毕业于长安大学,从事工程测量专业工作;
梁小龙,男,1979年生,工程师。2002 年毕业于焦作工学院,从事工程测量专业工作。
注:文章内所有公式及图表请以PDF形式查看。