科技创新VBA在测绘成果检验数据处理中的应用
蒋小华
(湖南 长沙 410008)
摘要:基于Excel办公软件,利用VBA编写程序代码,实现测绘成果检验数据误差、粗差、中误差计算,并生成标准化检验记录表格,便于后期文件整理及归档。
关键词:测绘成果;VBA;数据处理;检验;记录表
为了确保测绘成果质量,生产单位要严格执行 “两级检查、一
级验收”制度,通常在绘成果检验过程中需要应用Microsoft office
系列办公软件、AutoCAD及ArcGis等应用软件,检验数据计算及检
验记录整理,存在大量重复工作,不仅效率低下,而且容易出错。如果
能通过一门应用语言,编写程序代码,使重复性的工作自动化,将
能大幅提高效率,避免人为因素错误。本文介绍使用VBA开发程序,
实现导入检验数据,自动计算各项指标,生成标准化检验记录文件。
1 程序功能
通过人机交互窗口(如图1)输入样本比例尺、检测方式、仪
器名称及型号、仪器编码及中误差限值等参数后,将指定文件夹中
所有的检验数据导入到Excel中,程序自动计算出每个检测点文件
的中误差、粗差率及精度评分,最后生成标准格式的检验记录表。
图1 人机交互界面        图2 工作流程图
2 数据准备
所有检测点文件存放在同一文件夹根目录下,检测点文件采用
逗号分隔,后缀为txt的文本文件详见图3,并以检验样本号命名。
ID,X,Y
1,****791.498,***117.677  …检查点
2,****792.969,***117.544  …图上点
3,****304.831,***014.881  …检查点
4,****305.964,***015.288  …图上点
图3 检测点文件格式
3 程序编制
程序自动计算各项检验指标,需要采用VBA编写数据导入、检
验误差、粗差、中误差、精度评分计算及表格格式设置模块。
3.1 数据导入
利用FileDialog文件对话框获取文件夹路径、然后利用Dir函
数按文件系统顺序从文件夹中返回文件,并赋值给strwkname字符
串变量,使用left函数(strsamplename=left(strwkname,len
(strwkname)-4)获取样本号并赋值给strsamplename字符串变量,
后续生成表格中的图幅号由strsamplename提供。主要代码如下:
Open strwkname2 For Input As #1
drr=Split(StrConv(InputB(LOF(1),1),vbUnicode),vbNewLin
e)'将文本文件按行存入数组drr中
Close #1
ReDim err(1 To UBound(drr), 1 To 3)
For i = 1 To UBound(drr)
crr= Split(drr(i),",")‘将每一行按“,”分割存入crr数组
For j = 0 To UBound(crr)
err(i,j+1)=crr(j) ‘将文本文件按行列分别分割存入二维数
组err中
Next j
Next i
3.2 检验误差
将二维数组err按照检测点和图上点配对,计算检测点的检测
误差
存入二维数组arr中。
TotalCount= UBound(err, 1)/2 ‘将样本检测点总个数赋值给
变量TotalCount
ReDim arr(1 To TotalCount, 1 To 9)
For i = 1 To UBound(err,1) Step 2 ‘从err数组第1行开
始,间隔2行开始遍历整个数组
For j=1To3
arr((i+1)/2,j)= err(i,j)‘将检测点存入arr数组中
Next j
arr((i+1)/2,4)=err(i+1,2)‘将图上点X坐标存入arr数组中
arr((i+1)/2,5)=err(i+1,3)‘将图上点Y坐标存入arr数组中
arr((i+ 1)/ 2,6) = Format(err(i,2) - err(i+1,2),".000")
‘计算X坐标差值
arr((i+1)/2,7)=Format(err(i,3)-err(i+1,3),".000") ‘计
算Y坐标差值
arr((i+1)/2,8)= Format(Sqr((err(i,2)-err(i+ 1,2))^ 2 +
(err(i,4)-err(i + 1,4))^2), ".000") ‘计算检测误差ds,保留
三位小数
arr((i+1)/2,1)=(i+1)/2‘
Next i
3.3 粗差及中误差
按照测量规范要求,高精度检测时,在中误差限值2倍以内(含
2倍)的误差值均应参与数学精度统计,超过中误差限值2倍的判
为粗差;同精度检测时,在中误差限值22倍以内(含22倍)的
误差值均应参与数学精度统计,超过中误差限值22倍的判为粗
差,粗差率不能超过5%。当检测点数量少于20个时,以误差的算
术平均值代替中误差;超过20个时,按中误差统计计算。
同精度检测时,中误差计算公式为:
M=
M -检测中误差;n -检测点数量;i
∆-较差。
高精度检测时,中误差计算公式为:
M=
M-检测中误差;n-检测点数量;i∆-较差。
主要代码如下:
For I = 1 To TotalCount
vba 字符串转数组If CheckBox2.Value = 1 Then '高精度检测
If TotalCount < 20 Then ‘检验点少于20个
If arr(i,8)> 2 * Mse Then ‘以2倍中误差限值判读检测误
差是否为粗差
GEnum= GEnum + 1
arr(i,9)= "粗差"
Else
AccuracyCount = AccuracyCount + arr(i, 8)‘检测误差累加
End If
Else‘检验点超过20个(含20)
If arr(i, 8) > 2 * Mse Then ‘以2倍中误差限值判读检测
误差是否为粗差
GEnum = GEnum + 1
arr(i,9)= "粗差"
Else
Technological Innovation
10《华东科技》
AccuracyCount=AccuracyCount + arr(i,8)^2‘检测误差平方和累加
End If End If
Else '同精度检测
If TotalCount < 20 Then ‘检验点少于20个
If arr(i, 8) > 2 * sqrt(2) * Mse Then ‘以22倍中误差限值判读检测误差是否为粗差
GEnum = GEnum + 1 arr(i,9) = "粗差" Else
AccuracyCount = AccuracyCount + arr(i, 8)‘检测误差累加 End If
Else ‘检验点超过20个(含20)
If arr(i, 8) > 2 * sqrt(2) * Mse Then ‘以22倍中误差限值判读检测误差是否为粗差
GEnum = GEnum + 1 arr(i, 9) = "粗差" Else
AccuracyCount = AccuracyCount + arr(i, 8)^2 ‘检测误差平方和累加
End If End If End If Next i
If TotalCount < 20 Then
Mse1 = AccuracyCount / (TotalCount - GEnum) ‘以算术平均值代替中误差
Else
If CheckBox2.Value = 1 Then
Mse1 = sqrt(AccuracyCount / (TotalCount - GEnum)) ’高精度检测时,中误差计算公式
Else Mse1 = sqrt(AccuracyCount / 2 * (TotalCount - GEnum)) ‘同精度检测室,中误差计算公式
End If End If
GrMa = GEnum/TotalCount‘计算粗差率
If GrMa>0.5Then Exit sub ‘如果粗差了超过5%,则退出程序,说明存在精度超限的样本。 3.4 精度评分
GB/T24356-2009规定数字线划图(DLG)、数字高程模型(DEM)、数字正射影像(DOM)、数字栅格地图(DRG)的检查验收和质量评定
执行GB/T18316-2008
。GB/T24356-2009和GB/T18316-2008对检验
样本精度评分规则存在差异,需要根据成果类型按照对应评分规则评分。具体代码如下:
Function SuvPf(zwcxc As Double, zwc As Double,CBvalue As interger) As Double
Dim zwcxc1 As Double, zwc1 As Double, CBvalue1 As interger zwcxc1 = zwcxc zwc1 = zwc
CBvalue 1= CBvalue If CBvalue1=1 Then ‘当成果为数字测绘产品时,应按照GB/T 18316-2008 标准评分
If zwc1 < 0.3 * zwcxc1 Then SuvPf = 100 Else
SuvPf = 60 + 40 * (zxcxc1 - zwc1) / (0.7 * zxcxc1) SuvPf = SuvPf * 10# SuvPf = Int(SuvPf) / 10# ‘按照规范要求,取小数点后一位,不四舍五入。
End If
Else ’适合采用GB/T 24356-2009标准进行评分的测绘成果 If zwc1 < (1/3) * zwcxc1 Then SuvPf = 100 Else
SuvPf = format((120 - 60 * zwc1 / zwcxc1), "0.0") ‘采用线性内插评分,结果四舍五入,取一位小数。 End If End if
End Function 3.5 表格格式设置模块
参照CH/T1027-2012中附录C《平面位置中误差检测记录表》格式,按照A4纸张大小,每页打印34条检验记录,检测点未超过34个时,记录表为1页,共46行9列;检测点超过34点,记录表为多页,最后一页为46行9列,其他页为43行9列。定义一个n 行(足够容纳所有样本记录)9列的二维数组brr,将标准格式化的记录数据存入其中。利用VBA 单元格的RowHeight 属性、Font 属性、HorizontalAlignment 属性、NumberFormatLocal 属性、Merge 方法等实现标准格式设置,使用Range().Resize()函数将 brr 数组中的值赋值给扩展的Excel 区域。 4 程序应用
将标准格式的检查点文本文件放入同一个文件夹,打开工作簿,程序会自动弹出检验参数输入窗口,在窗口中填写各项参数,确认无误后,点击确认输入按钮,程序开始自动计算并生成标准化的检验记录表。如下表1所示。
表1 标准化的检验记录表
平面绝对位置中误差检测记录表 湘测质检(***)第(***)号
图幅号:***
比例尺:1︰5000 地形类别:*** 高精度检测  ■ 检测方法:比对分析法 单位:米 同精度检测  □ 仪器名称、型号:***
仪器编号:***
得分:
89.0  检测坐标值 图上坐标值
差值 序号 X1
Y1
X2
Y2
dx dy ds 备注 1 3245150.662  473892.952  3245150.008  473894.122  0.654  -1.170    1.340    2 3246844.075  473817.055  3246844.507  473816.956  -0.432  0.099  0.443    3 3245281.440  475171.813  3245281.764  475171.168  -0.324  0.645  0.721    4 3245887.829
473819.252
3245886.569
473818.643
1.260  0.609    1.399    . .
.
.
.
. . .  . . . . . . . .  . . . . . . . .  34 3246333.476
474274.075  3246332.063
474275.020    1.413
-0.945
1.699    备注:  检测点数量:      34个
粗差数量:  0个
粗差率: 0.00%
标准差:±
2.50
m
中误差:±
1.23
m 检查者:                年  月  日
复查者:                年  月  日
5 结语
利用VBA 开发程序,采用人机交互方式处理测绘成果检验数据,确实能大幅提高工作效率,避免人的因素产生错误,生成的检验记录表格规整,格式统一,便于存档。 参考文献:
[1]测绘成果质量检查与验收GB/T 24356-2009.中国标准出版社. [2]数字测绘成果质量检查与验收GB/T18316-2008.中国标准出版社. [3]数字正射影像图质量检验技术规程.CH/T1027-2012.测绘出版社. [4]Excel-高效办公VBA范例应用.人民邮电出版社. 作者简介:
蒋小华(1986.2-),男,本科,工程师,研究方向:测绘产品质量检验。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。