胡家豪 張愛國 蘇世星



摘 要:在進行導線測量時,受儀器、外界環境等觀測條件影響測量中經常會出現各種各樣的錯誤,而這些錯誤有可能會導致導線角度閉合差或者全長相對閉合差超限。為了準確找出造成成果超限的觀測數據,需要耗費大量的人力、物力進行計算和分析。為此,本文設計和實現了一個在確定導線超限以后,能夠快速找出錯誤轉折角或邊長等觀測數據的應用程序。最后,在IntelliJ IDEA+PostgresSQL數據庫的編程環境下,實現了導線測量超限情境下錯誤邊角的快速確定,提升了測繪信息化發展水平。
關鍵詞:導線測量;錯誤邊角;IntelliJ IDEA;JAVA;數據庫
中圖分類號:P214? 文獻標識碼:A? 文章編號:1673-260X(2023)03-0037-06
1 引言
在當前測繪和信息技術的不斷發展下,對于導線測量的精度和便捷性要求也變得越來越高。不同國家的研究人員積極地開展了這方面的研究,伊朗的H.Amini.S. Mehrdad對比了三種不同的調整誤差的方法,并進行了優化增加了在導線測量方面的精確度[16]。趙普分以礦井中的實際工作情況為例,通過陀螺儀定向解決了測量精度不達標的問題,減少了一些因為工作環境的問題而引起的誤差[1]。熊鵬飛等人研究了礦井內控制測量改善布設方案,采用了無定向支導線測量網布設的新方法[2]。除了研究通過改變布設來增加導線測量的精度之外,還有很多人致力于研究關于如何查找錯誤邊角這一問題。
一般導線的測量錯誤都是出現在觀測角度和平距上,如果觀測角出錯就會導致閉合角超限,平距出錯就會導致全長閉合差超限,但凡其中一個出現問題都需要通過計算來找出錯誤點,并對錯誤點重新進行測量,不過在查找錯誤以前我們仍然需要進行一些工作來確保其他步驟沒有出錯。首先是我們測量出來的數據有沒有抄寫錯誤,還有就是計算時是否有出現公式錯誤或者用錯數據的現象[3]。
隨著科技的發展,許多軟件也在導線測量中發揮著重要的作用,例如Excel宏運算、Matlab計算、VB開發和AutoCAD繪圖等[4,5]。AutoCAD是一個十分常見的平面繪圖軟件,這個軟件不僅操作簡單,而且繪制出來的幾何圖形也十分精準,它不僅可以將我們測量得到的導線精準繪制出來,還可以自動獲得坐標和坐標增量等數據,無需計算,大大加快了整體進度[6]。
但是無論用什么工具或軟件來幫助計算,始終可能會出現一些不可避免的錯誤發生,這會導致浪費大量的人力物力和時間,尤其是對一些剛剛接觸相關工作不太熟悉的新人來說,因此一個能直接幫助我們判斷出是邊錯誤還是角錯誤,并快速找出錯誤點的程序就變得很有必要了。
設計與實現的總體框架如下圖1所示。
架構圖分為以下三個模塊:訪問層,邏輯層和應用層。
訪問層使用的是PostegreSQL 14來對數據進行存儲和管理。邏輯層將使用IntelliJ IDEA Community Edition進行代碼的編寫,程序的主要功能為錯誤邊角的查詢。最后應用層為該程序可使用的領域,在進行水利工程,建筑道路過程和地下工程等項目時,都需要用到導線測量。
2 導線測量超限情境下錯誤邊角確定方法
2.1 數據采集與獲取
本文的研究內容為設計出一個在確定了導線超限的情況下幫助我們找出錯誤邊角的程序。因此需要收集一些數據來幫助我們測試程序的結果是否正確,為了保證程序的正確率,不能單單只用一組數據來進行驗證,要保證數據的多樣性,并且要將閉合導線與附和導線全部都考慮進去,并且人為地制造一些錯誤點。在選取數據的時候要選取完整的導線測量數據,其中包括各觀測點名字,觀測角度數,觀測點的起始坐標方位角和終點坐標方位角,該觀測點與相鄰觀測點的平距,起始坐標和中點坐標等關鍵數據,并且在使用這些數據之前需要提前進行人工計算,保證這些數據的全長閉合差和角度閉合差在限差以內。
本文所選取的數據庫為PostgreSQL數據庫,PostgreSQL數據庫在GIS領域有著其獨特的優勢,雖然結構上比較復雜,但是它的功能也是相當豐富的,它還有著穩定性高、速度快、具有開源性等優勢,因此也得到了越來越多用戶的信賴,用戶也變得越來越多了[7,8]。
為了保證測試數據的質量和數據的可靠性,我將從課本《數字地形測量學》中選取的數據進行測試。我最終選用的數據是書本P180上的附和導線表5-4,主要數據內容如下表1所示。
在拿到導線測量數據之后首先需要計算出測量數據的角度閉合差和全長相對閉合差,以確保數據是在限差以內,方便后續的程序檢驗,之后在程序設計完畢之后,根據檢驗需要再將其錄入數據庫。
2.2 錯誤角確定方法
在確定導線測量錯誤測角方面,經過多年的發展,已經有了相當成熟的查找確定方式[9],如下圖 2所示,如果符合導線出現錯誤,我們可以利用沒有經過平差計算改化的觀測角從B到C計算導線邊各個位置的坐標方位角以及坐標,并用同樣的方法從C倒推到B,通過對比這兩組坐標我們會發現,有一點的兩個觀測點的坐標非常相似,而其它觀測點坐標會有比較大的差異,由此我們就能確定坐標相似的這個點就是錯誤角發生的導線點。同樣的對于閉合導線,也是采用相同的方法來查找錯誤角的位置,從一點開始以順時針和逆時針兩個方向按同樣的方法分別推算各個位置的坐標方位角和坐標。
考慮到程序實現的可行性,所以本次錯誤邊角查找方式選取為上述方式,具體梳理計算流程及公式如下:
首先計算出角度閉合差,并于限差進行比較,確定角度閉合差是否超限,角度閉合差計算如公式1所示[9]。
其中f?茁為角度閉合差值,∑Z測為測量到的附和導線觀測角內角和,∑Z理為理論上附和導線觀測角內角之和,n為導線邊數,?琢AB是坐標方位角的起始方位角,?琢CD是坐標方位角的終點坐標,當觀測角內角為左角時,?琢AB為正,?琢CD為負,當觀測角內角為右角時,?琢AB為負,?琢CD為正。
計算完成后如果角度閉合差超限,則需要順時針和逆時針推算每條導線邊的坐標方位角和每個導線點的坐標,使用到公式2[10]。
其中,?琢前為導線下一個觀測點的坐標方位角,?琢后是導線當前位置觀測點的坐標方位角,?茁為導線觀測點的觀測角度數,公式中“±”取決于觀測角的方向是左角還是右角,當觀測角為左角時取”+”,反之為”-”,為了確保坐標方位角?琢前的取值范圍在0~360°之間,當?琢前大于360°時要減去360°,小于0時要加上360°。
當我們計算完所有的坐標方位角的數值之后,就可以用坐標方位角和平距計算對應位置的坐標增量和坐標了,具體推算公式如下所示。
其中,x后和y后是我們當前位置的坐標,x前、y前是下一個觀測點的坐標,?駐x、?駐y為坐標增量,S為相鄰兩個觀測點的距離。完成從起點開始推算導線坐標后,我們就要從導線的終點坐標開始重新倒推一遍,將最后得到的兩組坐標進行對比,坐標最為接近的一組就是我們要找的錯誤角的位置[11]。
2.3 錯誤邊確定方法
在確定角度閉合差沒有超限后,我們就要去判斷是否是全長閉合差超限了。全長閉合差如果超限了,一般是以下兩種原因導致的:
(1)我們所測量出來的平距有問題。
(2)計算時沒有用對應的坐標方位角進行計算。
如果是平距出現問題,這會導致我們計算出來的全長閉合差的坐標方位角與其中一個坐標方位角近乎相等如圖2所示,那么用來與這個坐標方位角相乘計算坐標增量的平距就是我們要找的錯誤邊。如果使用不對應的坐標方位角計算了坐標增量,那么我們計算出來的全長閉合差的坐標方位角會與其中一個坐標方位角的差值為90°左右。因為我們是用程序來進行計算坐標與坐標增量等數據的,所以不用考慮出現第二種情況的可能性。
下面我們來介紹一下怎么去計算全長閉合差的坐標方位角。首先我們用計算得到所有的坐標方位角,然后用對應的平距與cos的坐標方位角相乘就可以得到坐標增量?駐x,用對應的平距與sin的坐標方位角相乘就能得到坐標增量?駐y[12]。將所有的坐標增量相加得到坐標增量和fx與fy。之后用起點坐標與終點坐標相減就能得到差值x與差值y。將得到的這兩組數據相減然后正切就能得到象限角a,再根據象限角a所在的象限進行轉換就能得到全長閉合差的坐標方位角了。具體公式如下所示。
最后我們將得到的坐標方位角a與之前求得的坐標方位角進行對比,就能找出錯誤邊是哪個了。
3 錯誤邊角確定的系統設計
3.1 系統功能及整體框架
我們是用全站儀測得的數據是無法直接使用的,當我們完成外業觀測,想使用全站儀數據的時候可以將全站儀內的數據導出為文本格式(.txt)的文件來使用。獲得全站儀的數據后,我們就可以將數據存儲到數據庫中,并使用這些數據進行錯誤邊角的計算。數據處理流程如下圖4所示。
3.2 數據存儲設計
在錄入數據之前,我們要先在PostgreSQL里面將表格給建好。表名為clsj,表屬性和字段的設計如下表所示。表中的cz表示測站的名字,gd、g、gm分別為觀測角度數的度、分、秒,fd、ff、fm分別代表坐標方位角的度、分、秒,s表示平距,x和y表示的是坐標,id設置為key是為了讓我們在對數據進行過修改之后不會把順序給打亂[13,14]。
用數據庫存儲數據時我們還要使用數據庫代碼來插入或修改數據,為了方便使用我還設計了一個用于讀入數據的程序和一個簡易的界面,圖形界面如下圖5所示。有了這個程序之后我們就可以很方便地進行數據的存儲了,不過在此之前我們依舊需要先在數據庫中把表格創建好。我們先將我們測得的數據按我們事先設定好的格式寫入一個文本文件內,之后我們將我們的文本文件存放的地址填入圖中的文件存放路徑中,程序就會將該文件路徑下的所有txt文本格式的文件都讀入到數據庫中。再輸入我們所存儲的數據庫的用戶名和密碼,以此來實現不同數據庫的連接來對不同的項目進行區分,最后將對應的表名輸入到相應的位置,可以根據不同的項目或需求修改,以方便分類、管理不同項目的數據信息。完成了上述的步驟之后就可以將我們的數據存入相應的數據表中了,有了這個程序后我們就可以減少數據庫的使用,只要通過文本文件就可以進行存儲,使用起來會更加方便。
3.3 錯誤角確定設計
具體程序功能流程圖如圖6所示。
到此我們的錯誤角推算過程已經結束了,但是有時候直接將兩組坐標拿出來對比可能不夠直觀,這時我們可以通過增加一條關于坐標距離的計算公式來幫助我們更快地找出錯誤角的位置。這樣我們只要找出距離最小的點就能判斷出錯誤角的位置了,具體公式如公式12所示。
其中,d為兩坐標之間的距離,x和y為當前位置的正算坐標,x逆和y逆為當前位置的反算坐標。
3.4 錯誤邊確定設計
具體流程如下圖7所示。
4 錯誤邊角確定的系統實現
4.1 系統軟件實現
本論文的主要目的就是通過將上述公式代碼化,用電腦代替人來進行計算,以此來避免人為因素造成的計算錯誤,并大大提高了工作效率,減少了人力上的浪費。為了檢測測序計算出來的結果是否準確我將以一條符合導線的測量數據為例來進行檢測,其主要測試過程為:
(1)將測試數據上傳到本地數據庫當中,并將數據從數據庫里提取出來。
(2)先對測試數據進行計算判斷導線是否超限,如果測試數據的角度閉合差超限,我們就進入錯誤角計算模塊進行計算,我們先用導線起始位置的坐標方位角和坐標來正推出終點位置的坐標,然后再用導線終點位置的坐標方位角和坐標來倒推出起始點位置的坐標,將得出的兩組數據相同觀測點的坐標距離進行計算,最后輸出這些結果;如果角度閉合差未超限,那么就可以確定是邊錯誤,前一部分的計算流程與角錯誤一致,先算出各個觀測點的坐標方位角和坐標增量,之后算出全長閉合差的坐標方位角a,最后輸出計算結果與之前得出的坐標方位角進行對比。
(3)顯示計算結果。
具體流程如圖8所示:
為了方便測試數據的存儲和修改,這些導線的測試數據會被保存到PostgreSQL數據庫中,這樣就能方便我們在需要的時候能隨時將這些數據提取出來使用,并提取到IDEA中進行計算。
在使用IDEA幫助我們計算前,我們要先使用數據庫函數獲取本地數據庫的IP地址,再輸入端口號,用戶名,密碼和數據庫名來實現IDEA和PostgreSQL數據庫的連接,再按順序將表格里的內容導入進來,分別將觀測角度數,起始與終點坐標方位角,平距,起始坐標和終點坐標的數據存入長度為n不同的數組變量中,n為導線觀測點個數,在導入完數據之后我們就可以開始計算了。
程序的運行流程如圖9所示,前端會把我們獲得的數據記錄到數據庫中,我們再將數據庫中的數據讀取到程序里,最后程序會對數據進行計算并返回計算結果輸出錯誤邊角所在的位置。
4.2 系統應用與運行效果
運行程序的設備如下所示:
運行設備:聯想Y7000P
操作系統:Window10家庭中文版
處理器:Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz 2.59 GHz
系統類型:64位操作系統,基于x64的處理器
系統開發測試環境:PostgreSQL、IntelliJ IDEA Community Edition
通過人工計算來校驗程序計算結果的時候我們就能發現邊角錯誤的計算確實是一件相當復雜且繁瑣的工作,而且容易發生計算錯誤。但是對于計算機來說這個計算量可是太小了,只需短短1秒鐘就能完成計算并給出計算結果,大大節省了人力物力。而且計算機給出的結果更加清晰,能幫助我們快速地判別出錯誤點的位置。下面我將通過人為的方式來制造錯誤點,結果如下所示:
(1)錯誤角查找結果。我將P3點的觀測角度數從123°改為30°,我們可以從程序運行的結果中看到,兩組坐標最接近的觀測點為p3,以此可以判斷出我們的錯誤角為觀測點P3所在的位置。
(2)錯誤邊查找結果。我將P4-P5點的平距從100.07改到200,我們可以從程序運行的結果中看到,坐標方位角97.3°與我們算出來的結果最為接近,而與坐標方位角97.3°相乘的就是觀測點P4到P5的平距。
為了較為全面的測試軟件程序的有效性,陸續修改了其他位置的數據還有其它一些教科書上的數據進行測試,所有測試結果都達到了預期的效果。
通過人工計算來校驗程序計算結果的時候我們就能發現邊角錯誤的計算確實是一件相當復雜且繁瑣的工作,而且容易發生計算錯誤。但是對于計算機來說這個計算量并不大,只需短短1-2秒鐘就能完成計算并給出計算結果,大大節省了人力物力。而且計算機給出的結果更加清晰,能幫助我們快速地判別出錯誤點的位置。
5 結論
本文以導線測量出來的數據為前提設計了一個幫助相關從業者快速查找錯誤邊角的程序,該程序除了能快速判斷出錯誤邊角之外還能準確地找出具體的錯誤位置。在這之前如果工作人員發現了導線測量超限都只能以人工計算的方式來排查錯誤,或者是使用一些輔助計算的軟件來加快完成這項工作,這個計算過程是極其繁瑣的,而且哪怕是使用一些輔助工具來幫助計算,依舊有可能會出現計算錯誤等問題從而導致無法準確找出錯誤點的位置,使得錯誤點增加,反而加大了工作量,導致事倍功半。然而本文設計的這個程序可以有效地解決這個問題,使得原本繁雜的工作過程變得極為簡單,只需把數據輸入程序中就可能輕松地找到錯誤點,對于從事相關工作的人來說是非常便利的工具。
——————————
參考文獻:
〔1〕趙普分.甲烏拉礦區井下控制導線測量方案的設計與實施[J].地礦測繪,2018,34(01):41-44.
〔2〕熊鵬飛,朱美燕.無定向支導線控制測量新方法研究[J].內蒙古煤炭經濟,2017,9(12):151-152.
〔3〕莫登華,金炎平,胡智軍.導線測量錯誤的檢驗及處理方法[J].人民長江,2003,34(06):46-48.
〔4〕崔利,武文波.測繪領域中MATLAB的應用[J].遼寧工程技術大學學報,2005,24(S1):47-49.
〔5〕孫慶華,熊偉,張憲柱.基于Excel和MATLAB的導線網平差[J].北京測繪,2009,30(04):24-26.
〔6〕薛志勤,張寶利.基于AutoCAD的導線測量計算[J].技術與市場,2017,24(08):88-89.
〔7〕張瑩瑩,鄭建功,趙鋒.基于開源框架的WebGIS設計與實現[J].測繪與空間地理信息,2013,36(12):206-208.
〔8〕李仁剛,任智新,黃廣奎,孫頡,王峰,張闖.面向數據庫查詢加速的異構體系結構設計與實現[J].計算機工程與科學,2020,42(12):2169-2178.
〔9〕武漢大學《測量學》編寫組.測量學[J].3版.北京:測繪出版社,1991.
〔10〕王婷,張磊.導線測量中坐標方位角的推算[J].測繪與空間地理信息,2020,43(12):35-37.
〔11〕王旭華.查找導線測量錯誤方法的進一步探討[J].大連大學學報,2002,23(06):68-72.
〔12〕劉大文.解析法查找井下導線測量中測角錯誤[J].煤炭科技,2017,9(03):34-36.
〔13〕杜福南.淺議井下導線測量中圖解法查找測角錯誤[J].能源與節能,2016,37(09):34-35.
〔14〕唐芝青,唐先龍.地理空間數據庫技術分析與選型[J].測繪與空間地理信息,2020,43(11):79-81.
〔15〕周忠.數據起源技術研究及其在PostgreSQL中的實現[D].華南理工大學,2016.4-5.
〔16〕Chrzanowski, A.& G.Konecny, 1965. Theoretical comparison of triangulation, trilateration and traversing. The Canadian Surveyor, 19(04):353-366.
收稿日期:2022-11-14
基金項目:福建省自然科學基金(2020J01262)