袁 鹏
(长江宜昌航道局,湖北 宜昌 443000)
在水下测量过程中,往往需要对同一区域不同时间段或者不同测量队伍之间的测量数据进行对比。引起两期数据差异的原因有很多,如冲淤、施工、测量误差及错误等等。因此,合理地分析这些差异,进而对测量结果进行评定分析尤为重要。同时由于水下测量隐蔽等特性,两期测量数据在平面位置上往往并不重合,这就导致两者在对比过程中存在很大的不确定性,此时如何准确确定两者之间的差异并加以量化,对评定测量质量、分析水下地形的变化有着重要的现实意义。诸如arcgis、surfer等软件也有相应的数据叠加分析的功能,但是对于普通测量员工,该操作过程略显烦琐,同时其并不能以准确数值显示每个点位的变化情况。因此,基于测量行业需求与VBA语言实现简单可视化的测量数据对比软件的开发,以期提高水下测量数据的比对效率和质量。
实现两期数据的对比分析,核心的问题就是如何快速准确的计算出同一位置两期测量数据的差值。基于水下测量的实际需求,计算出同一点位前后两期的高程差值,并根据高程差值所在的不同区间对测量点数加以统计。测量行业多采用CAD进行绘图展点,基于AutoCAD VBA的编程原理进行程序开发,更有利于测量人员操作。因此选择基于VBA进行程序开发及窗体设计,以期为用户提供一个既快速准确又具有良好人机交互界面的数据对比软件。
如何实现同一位置两期数据的对比,根据实际操作过程主要有以下3种方法:① 采用距离相近法,对距离相近的两个点间进行比较计算(类似于传统方法进行两期数据的对比);② 采用网格法,计算前后两期网格点的数据然后进行比较计算(类似于surfer软件的计算原理);③ 采用三角网插值法,按本次测量点位对原数据进行内插计算[3],本次测量点位内插值与实测值进行比较计算。考虑到方法①中如何界定距离相近存在人为性,同时在水下地形复杂的地方,较小的位置偏差水深就会有较大的变化,因此比较的严谨性不足,而且同一位置相近的点也许会有很多,容易出现死循环;方法②中网格的大小确定存在一定问题,生成的网格区域一般都是规则的矩形[4],需经过处理,才能直观反映测区情况,同时检查结果展点后呈现规则的网格状,为判断其在测区的位置关系,还需进行测量边界的白化处理;方法③对比的位置与实测位置一致,同时检查的密度也与实测的比例尺一致,检查结果根据实测的点密度和断面设计情况输出呈现。综上所述,确定采用三角网内插计算的方法进行数据的对比分析。
内插法计算差值主要分为4步(图1):
图1 内插算法示意图
第一步,根据原始数据生成三角网点表。
第二步,判断本次测量的各点(内插点),采用角度法判断点在那个三角形角网内,或者三角形边上。
第三步,用双线性内插计算内插点的高程[5-6]。
双线性内插的计算方法如下。根据已知3个点A、B、C,内插计算P的高程:
Zl=ZA+(ZB-ZA)×(Xl-XA)/(XB-XA)
Zy=ZA+(ZC-ZA)×(Xr-XA)/(Xc-XA)
Zp=Zl+(Zr-Zl)×(Xp-Xl)/(Xr-Xl)
Yp=Yl=Yr,点l、r分别位于直线AB和AC上。
第四步,本次测量的高程值与内插所得高程值进行差值计算,所得值即为该点前后两次测量的不符值。
根据程序设计的流程及软件的操作过程,绘制程序架构[7],如图2所示。首先把两期的测量数据转换为常用的CASS格式(点号,,Y,X,Z)。在软件开始界面输入两期数据,并输入互查阀值,即确定差值所在区间进行统计和展点显示。点击确定,基于后台程序的计算把每个点位的差值和统计结果分别显示在CAD界面和软件界面上。
图2 程序架构图
(1)利用原始数据生成三角网
Private Function Create_Triangle(l As Long, x#(), y#(), h#(), Sjw_L As Long, X1#(), Y1#(), H1#(), X2#(), Y2#(), H2#(), x3#(), y3#(), h3#())As Boolean
….
X1(Sjw_L)= x(a),X2(Sjw_L)= x(b),x3(Sjw_L)= x(c)
Y1(Sjw_L)= y(a),Y2(Sjw_L)= y(b),y3(Sjw_L)= y(c)
H1(Sjw_L)= h(a),H2(Sjw_L)= h(b),h3(Sjw_L)= h(c)
(2)本次测量数据内插并求取差值
Public Function Triangle_Ins(l As Long, x#(), y#(), h#(), X1#(), Y1#(), H1#(), X2#(), Y2#(), H2#(), x3#(), y3#(), h3#(), Point_x#, Point_y#)As Double
….
OutPoint_xyh(2)= bc_h(ds)-go.Triangle_Ins(l, x, y, h, X1, Y1, H1, X2, Y2, H2, x3, y3, h3, OutPoint_xyh(0), OutPoint_xyh(1))
….
(3)把计算差值结果与设置临界值的关系按实际点位位置以文字的形式标出
Call ThisDrawing.ModelSpace.AddText(Format(OutPoint_xyh(2), "0.0"), OutPoint_xyh, TextHeight)
以某水域前后两期测量数据为例。手动设置数据检查的各临界值,通过阀界值的设定,程序会自动对两次测量数据的差值进行分区,以不同的层、不同颜色进行展点显示。输入与输出界面如图3-图5所示。
图3 程序开始界面
图4 程序计算结果界面
图5 对比显示结果界面
各区间占比数字的字体颜色与相对应区间展点的字体颜色一致。
关闭显示界面,返回CAD界面,此时各区间差值点都已经展绘在CAD界面上。
通过构建三角网,内插对比的方法能够大幅度的提高检查对比的效率,且更加准确,同时鉴于差值不同的显示效果,可以快速确定地形变化区域;在对比过程中对对比结果的统计,能够对本次测量结果进行准确评价;根据实际需要可对差值区间进一步细化,或变换差值显示效果,提高对比的辨识效果。