袁 鵬
(長江宜昌航道局,湖北 宜昌 443000)
在水下測量過程中,往往需要對同一區(qū)域不同時間段或者不同測量隊伍之間的測量數(shù)據(jù)進行對比。引起兩期數(shù)據(jù)差異的原因有很多,如沖淤、施工、測量誤差及錯誤等等。因此,合理地分析這些差異,進而對測量結(jié)果進行評定分析尤為重要。同時由于水下測量隱蔽等特性,兩期測量數(shù)據(jù)在平面位置上往往并不重合,這就導致兩者在對比過程中存在很大的不確定性,此時如何準確確定兩者之間的差異并加以量化,對評定測量質(zhì)量、分析水下地形的變化有著重要的現(xiàn)實意義。諸如arcgis、surfer等軟件也有相應的數(shù)據(jù)疊加分析的功能,但是對于普通測量員工,該操作過程略顯煩瑣,同時其并不能以準確數(shù)值顯示每個點位的變化情況。因此,基于測量行業(yè)需求與VBA語言實現(xiàn)簡單可視化的測量數(shù)據(jù)對比軟件的開發(fā),以期提高水下測量數(shù)據(jù)的比對效率和質(zhì)量。
實現(xiàn)兩期數(shù)據(jù)的對比分析,核心的問題就是如何快速準確的計算出同一位置兩期測量數(shù)據(jù)的差值。基于水下測量的實際需求,計算出同一點位前后兩期的高程差值,并根據(jù)高程差值所在的不同區(qū)間對測量點數(shù)加以統(tǒng)計。測量行業(yè)多采用CAD進行繪圖展點,基于AutoCAD VBA的編程原理進行程序開發(fā),更有利于測量人員操作。因此選擇基于VBA進行程序開發(fā)及窗體設計,以期為用戶提供一個既快速準確又具有良好人機交互界面的數(shù)據(jù)對比軟件。
如何實現(xiàn)同一位置兩期數(shù)據(jù)的對比,根據(jù)實際操作過程主要有以下3種方法:① 采用距離相近法,對距離相近的兩個點間進行比較計算(類似于傳統(tǒng)方法進行兩期數(shù)據(jù)的對比);② 采用網(wǎng)格法,計算前后兩期網(wǎng)格點的數(shù)據(jù)然后進行比較計算(類似于surfer軟件的計算原理);③ 采用三角網(wǎng)插值法,按本次測量點位對原數(shù)據(jù)進行內(nèi)插計算[3],本次測量點位內(nèi)插值與實測值進行比較計算??紤]到方法①中如何界定距離相近存在人為性,同時在水下地形復雜的地方,較小的位置偏差水深就會有較大的變化,因此比較的嚴謹性不足,而且同一位置相近的點也許會有很多,容易出現(xiàn)死循環(huán);方法②中網(wǎng)格的大小確定存在一定問題,生成的網(wǎng)格區(qū)域一般都是規(guī)則的矩形[4],需經(jīng)過處理,才能直觀反映測區(qū)情況,同時檢查結(jié)果展點后呈現(xiàn)規(guī)則的網(wǎng)格狀,為判斷其在測區(qū)的位置關(guān)系,還需進行測量邊界的白化處理;方法③對比的位置與實測位置一致,同時檢查的密度也與實測的比例尺一致,檢查結(jié)果根據(jù)實測的點密度和斷面設計情況輸出呈現(xiàn)。綜上所述,確定采用三角網(wǎng)內(nèi)插計算的方法進行數(shù)據(jù)的對比分析。
內(nèi)插法計算差值主要分為4步(圖1):
圖1 內(nèi)插算法示意圖
第一步,根據(jù)原始數(shù)據(jù)生成三角網(wǎng)點表。
第二步,判斷本次測量的各點(內(nèi)插點),采用角度法判斷點在那個三角形角網(wǎng)內(nèi),或者三角形邊上。
第三步,用雙線性內(nèi)插計算內(nèi)插點的高程[5-6]。
雙線性內(nèi)插的計算方法如下。根據(jù)已知3個點A、B、C,內(nèi)插計算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上。
第四步,本次測量的高程值與內(nèi)插所得高程值進行差值計算,所得值即為該點前后兩次測量的不符值。
根據(jù)程序設計的流程及軟件的操作過程,繪制程序架構(gòu)[7],如圖2所示。首先把兩期的測量數(shù)據(jù)轉(zhuǎn)換為常用的CASS格式(點號,,Y,X,Z)。在軟件開始界面輸入兩期數(shù)據(jù),并輸入互查閥值,即確定差值所在區(qū)間進行統(tǒng)計和展點顯示。點擊確定,基于后臺程序的計算把每個點位的差值和統(tǒng)計結(jié)果分別顯示在CAD界面和軟件界面上。
圖2 程序架構(gòu)圖
(1)利用原始數(shù)據(jù)生成三角網(wǎng)
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)本次測量數(shù)據(jù)內(nèi)插并求取差值
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)把計算差值結(jié)果與設置臨界值的關(guān)系按實際點位位置以文字的形式標出
Call ThisDrawing.ModelSpace.AddText(Format(OutPoint_xyh(2), "0.0"), OutPoint_xyh, TextHeight)
以某水域前后兩期測量數(shù)據(jù)為例。手動設置數(shù)據(jù)檢查的各臨界值,通過閥界值的設定,程序會自動對兩次測量數(shù)據(jù)的差值進行分區(qū),以不同的層、不同顏色進行展點顯示。輸入與輸出界面如圖3-圖5所示。
圖3 程序開始界面
圖4 程序計算結(jié)果界面
圖5 對比顯示結(jié)果界面
各區(qū)間占比數(shù)字的字體顏色與相對應區(qū)間展點的字體顏色一致。
關(guān)閉顯示界面,返回CAD界面,此時各區(qū)間差值點都已經(jīng)展繪在CAD界面上。
通過構(gòu)建三角網(wǎng),內(nèi)插對比的方法能夠大幅度的提高檢查對比的效率,且更加準確,同時鑒于差值不同的顯示效果,可以快速確定地形變化區(qū)域;在對比過程中對對比結(jié)果的統(tǒng)計,能夠?qū)Ρ敬螠y量結(jié)果進行準確評價;根據(jù)實際需要可對差值區(qū)間進一步細化,或變換差值顯示效果,提高對比的辨識效果。