摘要:本文介绍了应用Visual Basic6.0开发的水准测量平差软件的方法。通过软件自动生成EXCEL格式的水准测量平差计算表格进行数据处理,快速、准确计算出待求点的高程。
关键词:VB;数据处理;水准测量
水准测量平差计算就是对合格的高差予以调整。将闭合差以相反的符号按与各段水准路线长度(或按测站数)成正比的办法调整到各段高差上,求出改正后的高差再推算高程。手工计算速度慢、工作效率低,同时易出现计算错误,而Visual Basic6.0是一种简单易学的可视化语言,用其进行编程计算就显得方便灵活。本文结合作者工作的实践,详细地介绍了用VB开发水准测量平差软件的方法及应用。
1.VB语言的特点
(1).面向对象和可视化的程序设计。(2).事件驱动的运行机制。(3).结构化的程序设计语言。 (4).多种数据库访问能力。(5).提供了功能完备的应用程序集成开发环境。(6).方便使用的联机帮助功能。
2.水准测量平差计算的方法
(1).计算高差闭合差fh。
fh=Σh测 -(H终-H始)
fh允=±20(按四等水准测量限差)
fh≤fh允(合格)
fh允 —允许闭合差;Σh测 — 实测的各段高差和;H始— 起点高程;H终 — 终点高程;
(2).计算高差改正数Vi。
Σn —总测站数或路线总长度(km);ni —分段测站数或分段路线长度(km);
(3).计算改正后高差h改i。
h改i=h测¬ + Vi
(4).计算待求点高程Hi。
Hi=Hi-1+ h改i
3. 软件的开发原理
首先在VB中设计了一个固定的界面(图3.1),添加相应功能键及数据输入文本框,通过输入相
应的数据,利用VB编程实现自动生成电子表格;通过VB操作电子表格里数据进行平差计算。根据不同的平差方法,本软件设置按距离进行平差和按测站数进行平差两种计算方法。
图3.1水准测量平差软件界面
3.1参数输入方式
数据输入设计成两种方式;一种是先建立文本格式(txt)的参数文件,通过编写程序代码实现直接读取数据。另一种是在生成的平差计算表中输入观测数据。
3.1.1 参数文件的建立方法及各行数据意义
参数文件是建立在txt文本中,根据已知条件设置成五行,数据之间用逗号隔开;
各行数据的意义:
第一行数据表示路线的段数及限差。
第二行数据表示测站点号。
第三行数据表示起点及终点高程。
第四行数据表示每段测站数(按距离平差输入本段路线长度)。
第五行数据表示每段高差。
3.2参数的读取
参数的读取是通过在程序模块中添加如下的代码来实现的:
Dim p As String, p1 As String, p2 As String, P3 As String, p4 As String’定义变量类型
Dim j1 As Integer’定义变量类型
Dim sm As String’定义变量类型
设置打开读取文本代码
sm = IIf(Right(App.Path, 1) = "\", App.Path, App.Path + "\")
On Error GoTo nofile
CommonDialog1.DialogTitle = "读取数据库文件"
CommonDialog1.InitDir = sm + "liti"
CommonDialog1.FileName = ""
CommonDialog1.Filter = "文本文件(*.txt)|*.txt"
CommonDialog1.CancelError = True
CommonDialog1.ShowOpen
Dim strFilename As String
strFilename = CommonDialog1.FileName
Open strFilename For Input As #1 '打开文件
Input #1, istation, bhc
txt3.Text = istation
Txt4.Text = bhc
ReDim sdangle(istation + 1) As String
For I = 1 To istation + 1 '读入点名
Input #1, sdangle(I)
Next I
Input #1, Xa, Ya '读入路线起终算点高程
ReDim sAngle(istation) As Double, sEdge(istation) As Double
For I = 1 To istation '读入路线长度
Input #1, sAngle(I)
Next I
For I = 1 To istation '读入高差
Input #1, sEdge(I)
Next I
Close #1 '不要忘记关闭文件
nofile:
If Err.Number = 32755 Then
Exit Sub
End If
通过以上代码,我们便轻松快捷的将参数读取到软件里面;为进行下一步平差计算奠定基础。
4.平差计算表格的自动生成
平差计算是利用VB程序代码自动生成EXCEL表格,通过操作程序在表里进行数据计算。
4.1实现的方法
4.1.1全局变量的设置
在程序工程引用中选择“Microsoft Excel 12.0 Object Library”后按“确定”,为保证Excel在整个程序中共享,将其设置为全局变量。全局变量的实现是在程序模块的顶部添加如下代码:
Dim xlApp As Excel.Application '定义EXCEL类
Dim xlBook As Excel.Workbook '定义工件簿类
Dim xlSheet As Excel.Worksheet '定义工作表类
Dim xlsheet1 As Excel.Worksheet'定义工作表类
4.1.2平差表格生成代码及步骤
(1).设置工作表名称
With xlApp
.Workbooks.Add '打开工作薄
.Visible = True '工作薄设置为可见
.Worksheets(1).Name = "水准路线平差计算表" '设置工作表的名称
End With
Set xlSheet = xlApp.Worksheets(1)
xlApp.Visible = True
xlSheet.Activate
(2).设置显示比例
ActiveWindow.Zoom = 100
(3).指定生成单元格及合并单元格
For I = 6 To n * 2 + 8 Step 2
For j = 1 To 1
xlSheet.Range(xlSheet.Cells(I, j), xlSheet.Cells(I + 1, j)).Merge
Next j
Next I
For I = 7 To n * 2 + 7 Step 2
For j = 2 To 5
xlSheet.Range(xlSheet.Cells(I, j), xlSheet.Cells(I + 1, j)).Merge
Next j
Next I
For I = 6 To n * 2 + 8 Step 2
For j = 6 To 7
xlSheet.Range(xlSheet.Cells(I, j), xlSheet.Cells(I + 1, j)).Merge
Next j
Next I
(4).为单元格添加线条并设置单元格高度、宽度、颜色及单元格内相关文字
With xlSheet
.Range("a4:a5").Merge
.Range(xlSheet.Cells(n * 2 + 8, 6), xlSheet.Cells(n * 2 + 8, 7)).Merge
p = "a4" + ":g" + Trim(Str(n * 2 + 9))
.Range(p).RowHeight = 11
.Range(p).Borders.LineStyle = 1
p1 = "a" + Trim(Str(n * 2 + 10)) + ":g" + Trim(Str(n * 2 + 12))
.Range(p1).RowHeight = 22
.Range("B4:G4").Borders(xlEdgeBottom).LineStyle = xlLineStyleNone '无线条
p2 = "a4" + ":a" + Trim(Str(n * 2 + 12))
P3 = "g4" + ":g" + Trim(Str(n * 2 + 12))
p4 = "a" + Trim(Str(n * 2 + 12)) + ":g" + Trim(Str(n * 2 + 12))
.Range(p2).Borders(1).Weight = 3’宽度设置
.Range(P3).Borders(2).Weight = 3
.Range("a4:g4").Borders(3).Weight = 3
.Range(p4).Borders(4).Weight = 3
.Range("A3:g2000").HorizontalAlignment = 3
.Range("a3").HorizontalAlignment = 2
.Range("f1").HorizontalAlignment = 3
.Range(p1).HorizontalAlignment = 1
.Range("a1").RowHeight = 25
.Range("a2:g5").RowHeight = 20
.Columns("A").ColumnWidth = 7
.Columns("b:g").ColumnWidth = 12
.Range("c1").Font.Size = 15
.Range("a2:g2000").Font.Size = 10
.Range("c1").Font.Name = "黑体"
.Range("c1").Value = "水准路线平差计算表"
.Range("A3").Value = "工程名称:"
.Range("f3").Value = "等级:"
.Range("a4:a5").Value = "点名"
.Range("b4:g4").Value = Array("距离或测站数", "高差", "改正数", "调整后高差", "调整后高程", "原有高程")
.Range("b5:g5").Value = Array("(km)或(站)", " (m)", "(mm)", "(m)", "(m)", "(m)")
End With
xlSheet.Cells(6, 1) = "BMA"
xlSheet.Cells(n * 2 + 6, 1) = "BMB"
b = 8
For I = 1 To n - 1
xlSheet.Cells(b, 1) = I
b = b + 2
Next
xlSheet.Cells(n * 2 + 8, 1) = "∑"
(5).设置打印预览功能及设置页边距(括号中的数字为距离),分别是左、右、上、下边距
With xlApp.ActiveSheet.PageSetup
.LeftMargin = xlApp.InchesToPoints(0.3)
.RightMargin = xlApp.InchesToPoints(0.3)
.TopMargin = xlApp.InchesToPoints(0.8)
.BottomMargin = xlApp.InchesToPoints(1)
.CenterHorizontally = True '打印页面是否水平
.CenterVertically = False '是否垂直居中
.Orientation = 1 '设置打印方向:1为纵向打印,2为横向打印
.PaperSize = 9 '设置打印纸的类型,例如A3为8,A4为9
.PrintTitleRows = Range("a1:g5").Address
.CenterFooter = "计算:" & Space(35) & "复核:" & vbCrLf & " 监理:" & Space(35) & "日期:" & vbCrLf & "&10第 &P 页 " '共 " & j1 & " 页 "
End With
Command4.Enabled = True
Command3.Enabled = True
Command2.Enabled = False
以上工作完成后,我们便可以生成一张水准路线平差计算表,通过导入或输入数据便可进行下一步工作。
5.平差计算
计算是对输入的数据进行有效、合理的处理,并对已知数据进行判断;软件能否快速、准确得出计算结果这一步至关重要;因此按照水准测量平差原理进行编程。
5.1计算代码
5.1.1高程闭合差及限差代码
(1).理论闭合差
gcc = Ya – Xa
计算各段高差和
For I = 7 To n * 2 + 6 Step 2
jz = xlSheet.Cells(I, 3)
m = m + jz
xlSheet.Cells(n * 2 + 7, 3) = m
Next
(2).计算边长总和
For I = 7 To n * 2 + 6 Step 2
sbj = xlSheet.Cells(I, 2)
sb = sb + sbj
xlSheet.Cells(n * 2 + 7, 2) = sb
Next
(3).计算闭差并判断是否超了限
fb = (m - gcc) * 1000 '闭合差
xlSheet.Cells(n * 2 + 10, 3) = "闭合差fh=" & Format(fb, "0.0") & "mm"
xc1 = Sqr(sb) * xc
If Abs(fb) > Abs(xc1) Then
MsgBox "实测角值超限,请重新检查"
Set xlApp = Nothing
Set xlBook = Nothing
Exit Sub
End If
xlSheet.Cells(n * 2 + 11, 3) = "限差Fh=" & xc & "*" & "√L" & "=" & Format(xc1, "0.0") & "mm"
xlSheet.Cells(n * 2 + 12, 3) = "fh < FH=" & Format(fb, "0.0") & "<" & Format(xc1, "0.0") & "(合格)"
5.1.2高差改正数
For I = 7 To n * 2 + 6 Step 2
sbj = xlSheet.Cells(I, 2)
xlSheet.Cells(I, 4) = Format(-fb / sb * sbj, "0.0")
5.1.3计算改正后高差
For I = 7 To n * 2 + 6 Step 2
bfh = xlSheet.Cells(I, 4)
bfh1 = bfh1 + bfh
xlSheet.Cells(n * 2 + 7, 4) = bfh1
Next
5.1.4计算待求点高程
For I = 7 To n * 2 + 6 Step 2
xlSheet.Cells(I, 5) = xlSheet.Cells(I, 3) + xlSheet.Cells(I, 4) / 1000
xlSheet.Cells(I + 1, 6) = xlSheet.Cells(I, 5) + xlSheet.Cells(I - 1, 6)
cz = xlSheet.Cells(I, 5)
cz1 = cz1 + cz
xlSheet.Cells(n * 2 + 7, 5) = cz1
xlSheet.Cells(n * 2 + 8, 6) = "理论高程差=" & Format(Ya - Xa, "0.000")
Next
至此整个程序编写完成,通过测试无运行计算问题。将其编译生成可执行文件(.exe图5.1),在脱离VB的环境下,在Windows环境下直接运行。
图5.1水准测量平差软件安装程序图
6.软件平差计算例题
如图6.1中,从已知高程的水准点BM3开始施测,经过B01、B02两待定点最后附合到已知高程的水准点BM5 。试按四等水准测量限差计算B01、B02点高程。
图6.1附合水准测量路线示意图
6.1建立文本格式的参数表
6.1.1参数表(图6.2)
图6.2数据文件
6.1.2运行软件读取参数(图6.3)
图6.3软件运行界面
6.1.2生成水准测量平差计算表并显示平差成果(图6.4)
图6.4水准测量平差计算成果表
7.结论
从上面的过程可以看出,利用VB可以很容易实现水准测量平差的自动计算,大大减轻了劳动强度,提高了计算效率,增加了计算结果的可靠性。同时平差计算表用EXCEL进行数据的输入输出,方便灵活。
参考文献
[1]李立宗,VB程序设计教程[M],天津:南开大学出版社,2009
[2]伍云辉,等,Excel VBA办公应用开发详解[M],北京:电子工业出版社,2008
[3]邱国屏,铁路测量(第二版)[M],北京:中国铁道建出版社,1999
论文作者:温晓辉
论文发表刊物:《基层建设》2019年第10期
论文发表时间:2019/7/1
标签:高程论文; 高差论文; 水准论文; 测量论文; 数据论文; 路线论文; 软件论文; 《基层建设》2019年第10期论文;