劉 科,廖中平,余澤彬(1.道路災(zāi)變防治及交通安全教育部工程研究中心,湖南長(zhǎng)沙 410004; .長(zhǎng)沙理工大學(xué)交通運(yùn)輸工程學(xué)院,湖南長(zhǎng)沙 410004)
?
Excel VBA在導(dǎo)線(xiàn)近似平差計(jì)算中的應(yīng)用*
劉科1,2,廖中平1,2,余澤彬2
(1.道路災(zāi)變防治及交通安全教育部工程研究中心,湖南長(zhǎng)沙410004; 2.長(zhǎng)沙理工大學(xué)交通運(yùn)輸工程學(xué)院,湖南長(zhǎng)沙410004)
摘要:傳統(tǒng)導(dǎo)線(xiàn)平差計(jì)算過(guò)程繁瑣,且易受人為因素影響。利用Excel VBA編程進(jìn)行導(dǎo)線(xiàn)自動(dòng)平差計(jì)算,平差結(jié)果包括自動(dòng)生成的CASS展點(diǎn)文件和平差報(bào)告。當(dāng)觀(guān)測(cè)數(shù)據(jù)存在粗差,可進(jìn)行一個(gè)轉(zhuǎn)角或一條導(dǎo)線(xiàn)邊粗差的自動(dòng)查找。以閉合導(dǎo)線(xiàn)平差計(jì)算為例,本程序可快速檢查數(shù)據(jù)且計(jì)算出未知點(diǎn)坐標(biāo)。
關(guān)鍵詞:導(dǎo)線(xiàn)平差; Excel VBA;數(shù)據(jù)檢查; CASS
導(dǎo)線(xiàn)內(nèi)業(yè)平差是工程勘測(cè)中常見(jiàn)的一項(xiàng)數(shù)據(jù)處理工作,一般測(cè)繪人員借助科學(xué)計(jì)算器按相應(yīng)的導(dǎo)線(xiàn)平差計(jì)算表格進(jìn)行分步計(jì)算,過(guò)程較繁瑣。當(dāng)測(cè)區(qū)面積較大,待計(jì)算導(dǎo)線(xiàn)數(shù)較多時(shí),計(jì)算量就成倍增加。若導(dǎo)線(xiàn)平差出錯(cuò),數(shù)據(jù)檢查比較繁瑣,需重新輸入數(shù)據(jù)[1-3]。Microsoft Excel表格界面友好、清晰、直觀(guān),同時(shí)內(nèi)置大量公式與函數(shù),使其具有強(qiáng)大的計(jì)算功能。將Excel特性與傳統(tǒng)的導(dǎo)線(xiàn)近似平差結(jié)合,計(jì)算將非常簡(jiǎn)單[4-5]。本文在計(jì)算導(dǎo)線(xiàn)點(diǎn)坐標(biāo)的基礎(chǔ)上,增加了導(dǎo)線(xiàn)測(cè)量數(shù)據(jù)錯(cuò)誤檢查功能,進(jìn)一步完善導(dǎo)線(xiàn)計(jì)算過(guò)程[6]。其主要包括表格的制作、坐標(biāo)計(jì)算及測(cè)量數(shù)據(jù)錯(cuò)誤檢查三個(gè)部分。
Excel導(dǎo)線(xiàn)平差計(jì)算表格設(shè)計(jì),采取與傳統(tǒng)導(dǎo)線(xiàn)平差計(jì)算表格一致。計(jì)算表格的大小,可根據(jù)計(jì)算的需要而改變,使用者只需選擇導(dǎo)線(xiàn)類(lèi)型和輸入未知點(diǎn)個(gè)數(shù),程序就會(huì)自動(dòng)生成相應(yīng)的導(dǎo)線(xiàn)平差計(jì)算表格[7]。
表格的自動(dòng)生成主要調(diào)用Excel VBA中常用的幾個(gè)函數(shù),如單元格選定函數(shù)cell、單元格合并函數(shù)merge、邊框加粗函數(shù)border等[8]。
導(dǎo)線(xiàn)可分為閉合導(dǎo)線(xiàn)、附合導(dǎo)線(xiàn)和支導(dǎo)線(xiàn),其中支導(dǎo)線(xiàn)只有必要的起始數(shù)據(jù),缺少對(duì)觀(guān)測(cè)數(shù)據(jù)的檢核[9]。3種導(dǎo)線(xiàn)計(jì)算步驟雖不完全相同,但計(jì)算原理基本一致。以附合導(dǎo)線(xiàn)平差計(jì)算過(guò)程為例,其計(jì)算原理如下:附合導(dǎo)線(xiàn)計(jì)算的起算數(shù)據(jù)一般包括4個(gè)已知點(diǎn)坐標(biāo)及待測(cè)點(diǎn)觀(guān)測(cè)角度與邊長(zhǎng)[10]。本文中起算數(shù)據(jù)及計(jì)算表格,如圖1所示。
2.1角度閉合差與方位角的計(jì)算附合導(dǎo)線(xiàn)角度閉合差的計(jì)算公式:
Σβ為各個(gè)觀(guān)測(cè)角(右角)之和,Σβ為依據(jù)給定的方位角計(jì)算得出,計(jì)算公式:
圖1 附合導(dǎo)線(xiàn)計(jì)算表格Fig.1 Table of connecting traverse calculation
根據(jù)測(cè)角的個(gè)數(shù)進(jìn)行反號(hào)平均分配,得出改正后角度。以計(jì)算各邊方位角為例,其程序代碼如下[11]:
……
For i =1 To n + 1
Cells(2 * i + 9,9)= Fix(fwj2)?
Cells(2 * i + 9,10)= Fix(fwj2 * 60-Cells(2 * i + 9,9)* 60)
Cells(2 * i + 9,11)= Format(fwj2 * 3600-Cells(2 * i + 9,9)* 3600-Cells(2 * i + 9,10)* 60,"#.##")
……
本段代碼調(diào)用for循環(huán)語(yǔ)句計(jì)算各邊方位角,使用fix函數(shù)取整,format格式輸出函數(shù)將計(jì)算結(jié)果以度分秒形式顯示,并對(duì)秒進(jìn)行小數(shù)點(diǎn)后兩位有效數(shù)的保留。
2.2坐標(biāo)增量的計(jì)算及其改正
在計(jì)算各邊方位角后,便可根據(jù)距離計(jì)算出各點(diǎn)坐標(biāo)增量,其計(jì)算公式如下:
坐標(biāo)增量計(jì)算代碼如下:
......
For i =1 To n + 1
Cells(2 * i + 9,13)= Format(Cells(2 * i + 9,12)* Cos(fwj2 / 180 * 3.1415926),"#.####")
Cells(2 * i + 9,14)= Format(Cells(2 * i + 9,12)* Sin(fwj2 / 180 * 3.1415926),"#.####")
Next i
......
此段代碼同樣調(diào)用for循環(huán)語(yǔ)句,根據(jù)計(jì)算公式,使用格式輸出函數(shù)format對(duì)結(jié)果進(jìn)行小數(shù)點(diǎn)后四位有效數(shù)的保留。坐標(biāo)閉合差及坐標(biāo)增量分配計(jì)算公式如下:
式中:ΣΔX測(cè)、ΣΔY測(cè)為各邊縱、橫坐標(biāo)實(shí)際增量代數(shù)和;ΣΔX理、ΣΔY理為各邊縱、橫坐標(biāo)理論增量代數(shù)和;ΔXi、ΔYi為坐標(biāo)增量改正值,其與邊長(zhǎng)成正比;ΣD為各導(dǎo)線(xiàn)邊長(zhǎng)之和。
2.3計(jì)算點(diǎn)的坐標(biāo)及粗差判斷
由一個(gè)已知點(diǎn)的坐標(biāo)(X,Y),根據(jù)Xi+1= Xi+ΔXi,Yi+1= Yi+ΔYi可依次計(jì)算得到其它點(diǎn)的坐標(biāo)。在導(dǎo)線(xiàn)平差計(jì)算完后,程序會(huì)根據(jù)事先給定的fβ的限差范圍和相對(duì)閉合差大小判斷外業(yè)數(shù)據(jù)是否合格,這也是導(dǎo)線(xiàn)平差的目的之一。其中相對(duì)閉合差計(jì)算公式如下:
角度閉合差或相對(duì)閉合差是否超限,程序?qū)⒃谳o助計(jì)算欄中給出結(jié)果,其部分代碼如下:
……
If fxy-(Val(TextBox1.Text))>0 And Abs(jdc)-Val(TextBox2.Text)*(n + 1)^ 0.5<0 Then
Cells(2 * n + 19,2)= "相對(duì)閉合差和角度閉合差均符合精度要求觀(guān)測(cè)數(shù)據(jù)合格"
……
ElseIf fxy-(Val(TextBox1.Text))<0 And Abs(jdc)-Val(TextBox2.Text)*(n + 1)^ 0.5<0 Then
Cells(2 * n + 19,2)= "相對(duì)閉合差超限,角度閉合差合格觀(guān)測(cè)數(shù)據(jù)不合格"
ElseIf fxy-(Val(TextBox1.Text))>0 And Abs(jdc)-Val(TextBox2.Text)*(n + 1)^ 0.5>0 Then
Cells(2 * n + 19,2)= "相對(duì)閉合差合格,角度閉合差超限觀(guān)測(cè)數(shù)據(jù)不合格"
Else
Cells(2 * n + 19,2)= "相對(duì)閉合差和角度閉合差均超限
觀(guān)測(cè)數(shù)據(jù)不合格"
……
此段代碼使用if選擇語(yǔ)句,根據(jù)事先設(shè)置的限差進(jìn)行結(jié)果判定,再調(diào)用單元格函數(shù)cell在相應(yīng)位置顯示判定結(jié)果。附合導(dǎo)線(xiàn)計(jì)算成果,見(jiàn)圖2。
2.4生成平差報(bào)告及CASS展點(diǎn)文件
Excel根據(jù)測(cè)量數(shù)據(jù)計(jì)算出各未知點(diǎn)的坐標(biāo)后,將以文檔形式予以保存,便于查詢(xún)和使用。將計(jì)算的點(diǎn)位坐標(biāo)存入文檔,可調(diào)用output和print函數(shù)寫(xiě)入,其格式:open文件名for output/ print as #文件號(hào),后使用print函數(shù)進(jìn)行寫(xiě)入。其可將數(shù)據(jù)寫(xiě)入word與txt中[12]。平差報(bào)告,見(jiàn)圖3。
圖2 附合導(dǎo)線(xiàn)計(jì)算成果表Fig.2 Calculation results of connecting traverse
圖3 平差報(bào)告表Fig.3 Report of adjustment
為便于點(diǎn)在電子地圖中展繪,增加生成CASS展點(diǎn)文件功能,擴(kuò)展平差成果數(shù)據(jù)的實(shí)用性。CASS軟件默認(rèn)dat文件數(shù)據(jù)格式為:點(diǎn)號(hào),,縱坐標(biāo),橫坐標(biāo),高程[13]。由于只是導(dǎo)線(xiàn)平差,默認(rèn)高程為零。生成dat文件顯示內(nèi)容,如圖4所示。
圖4 CASS展點(diǎn)文件Fig.4 Point file for CASS
在導(dǎo)線(xiàn)平差中,如果閉合差超限,則說(shuō)明導(dǎo)線(xiàn)外業(yè)測(cè)量中測(cè)角或測(cè)邊觀(guān)測(cè)數(shù)據(jù)不合格,應(yīng)進(jìn)行重測(cè)。若能事先分析出錯(cuò)的導(dǎo)線(xiàn)邊或水平角,則可避免盲目的重測(cè)工作[9]。
3.1一個(gè)角度粗差的查找方法
當(dāng)導(dǎo)線(xiàn)角度閉合差超限,且僅有一個(gè)轉(zhuǎn)角水平角出錯(cuò)時(shí),其查找方法為:分別從導(dǎo)線(xiàn)兩端的已知點(diǎn)坐標(biāo)、方位角算起,按支導(dǎo)線(xiàn)計(jì)算各點(diǎn)坐標(biāo),得兩套坐標(biāo)。如果某點(diǎn)坐標(biāo)兩次算得的坐標(biāo)值很接近,則應(yīng)檢查該角。如圖5所示,則應(yīng)先檢查3點(diǎn)處的角度。閉合導(dǎo)線(xiàn)查找的方法類(lèi)似[9]。
圖5 附合導(dǎo)線(xiàn)中一個(gè)角測(cè)錯(cuò)Fig.5 A wrong angle in connecting traverse network measurement
3.2一條導(dǎo)線(xiàn)邊粗差的查找方法
當(dāng)導(dǎo)線(xiàn)全長(zhǎng)相對(duì)閉合差超限,且僅有一條邊測(cè)錯(cuò)時(shí),其檢查方法為:先求全長(zhǎng)閉合差的方向,其坐標(biāo)方位角的正切公式為:
將此方位角與各邊的方位角相比較,若與之平行或大致平行的邊,則應(yīng)檢查該邊[9-10]。如圖6所示,則應(yīng)先檢查23這條邊。附合導(dǎo)線(xiàn)的查找方法類(lèi)似。
參考文獻(xiàn)以閉合導(dǎo)線(xiàn)為例([10]),已知DZ點(diǎn)坐標(biāo)和相應(yīng)的觀(guān)測(cè)數(shù)據(jù),其計(jì)算結(jié)果,見(jiàn)表1。
圖6 閉合導(dǎo)線(xiàn)中一條邊測(cè)錯(cuò)Fig.6 A wrong side in closed traverse network measurement
圖7 測(cè)角超限誤差檢查Fig.7 Error check of overrunning angles
表1 算例計(jì)算結(jié)果Tab.1 Result of example
如圖7所示,將DZ測(cè)站處的觀(guān)測(cè)角改動(dòng)以后,角度閉合差超限,程序?qū)⒆詣?dòng)查出DZ測(cè)站數(shù)據(jù)超限。
利用Excel VBA編寫(xiě)導(dǎo)線(xiàn)近似平差計(jì)算程序,生成CASS展點(diǎn)文件,并對(duì)導(dǎo)線(xiàn)轉(zhuǎn)角或?qū)Ь€(xiàn)邊存在一個(gè)粗差進(jìn)行數(shù)據(jù)自動(dòng)檢查與查找,可大大簡(jiǎn)化和方便全站儀外業(yè)導(dǎo)線(xiàn)測(cè)量與平差計(jì)算工作,同時(shí)平差成果與CASS軟件數(shù)據(jù)文件格式保持一致,便于導(dǎo)線(xiàn)平差成果的應(yīng)用。
[1]云剛.用Excel處理導(dǎo)線(xiàn)計(jì)算問(wèn)題[J].西部探礦工程,2014,26(3):75-76.
[2]姬根杰.Excel VBA編程在導(dǎo)線(xiàn)測(cè)量中的應(yīng)用[J].山西建筑,2008,34(1):367-368.
[3]董云.在Excel表中進(jìn)行單一導(dǎo)線(xiàn)簡(jiǎn)易平差的方法[J].地礦測(cè)繪,2004,20(4):21-25.
[4]向繼平,駱忠愛(ài).Excel在導(dǎo)線(xiàn)平差計(jì)算中的應(yīng)用[J].礦山測(cè)量,2012(6):32-34.
[5]周海生,徐春風(fēng).Excel在工程測(cè)量數(shù)據(jù)處理中的應(yīng)用[J].大科技,2014(12):251-252.
[6]王旭華.查找導(dǎo)線(xiàn)測(cè)量錯(cuò)誤方法的進(jìn)一步探討[J].大連大學(xué)學(xué)報(bào),2002,23(6):68-72.
[7]陽(yáng)德勝.利用VB編程控制Excel處理測(cè)量數(shù)據(jù)[J].城市勘測(cè),2007(4):96-99.
[8]何非,葉萃娟.Excel VBA高效辦公從入門(mén)到精通[M].北京:中國(guó)青年出版社,2006.
[9]顧孝烈,鮑峰,程效軍.測(cè)量學(xué)[M].2版.上海:同濟(jì)大學(xué)出版社,1990:169-170.
[10]張序.測(cè)量學(xué)[M].2版.南京:東南大學(xué)出版社,2012:128-136.
[11]林梓鵬.Excel電子表格在測(cè)繪中的應(yīng)用[J].城市勘測(cè),2009(1):137-141.
[12]龔沛曾,楊志強(qiáng),陸蔚民.Visual Basic程序設(shè)計(jì)教程[M].3版.北京:高等教育出版社,2011:192-202.
[13]孫艷崇.坐標(biāo)數(shù)據(jù)在CASS中展點(diǎn)的注意事項(xiàng)[J].甘肅科技縱橫,2014,43(2):32-35.
Application of Excel VBA in Approximate Adjustment of Traverse
LIU Ke1,2,LIAO Zhong-ping1,2,YU Ze-bin2
(1.Engineering Research Center of Catastrophic Prophylaxis and Treatment of Road&Traffic Safety,Ministry of Education,Changsha Hunan 410004,China; 2.School of Traffic and Transportation Engineering,Changsha University of Science and Technology,Changsha Hunan 410004,China)
Abstract:The process of traditional adjustment calculation of traverse survey is not only tedious,but also easy to be influenced by human factors.We can utilize the development tools VBA in the Excel to program to finish the process automatically.The adjustment results include the file of points for CASS and the report.When the observed data includes the gross errors,the program can be applied to find out the mistake on the condition that only one angle or side contains gross error.By taking the adjustment calculation of closed traverse for an example,we can rapidly check the data and can calculate the coordinate of unknown points by using the program.
Key words:traverse adjustment; Excel VBA; data check; CASS
作者簡(jiǎn)介:劉科(1989~),男,湖北仙桃人,碩士研究生,主要研究方向:三維激光掃描以及外業(yè)數(shù)據(jù)處理。
基金項(xiàng)目:道路災(zāi)變防治及交通安全教育部工程研究中心開(kāi)發(fā)基金(kfj110307)
中圖分類(lèi)號(hào):P 221+.4
文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1007-9394(2015)02-0031-04 *
收稿日期:2015-03-21