曹 明,馬天馳,宋 偉,江智云,郭 軍
(1.浙江省交通規(guī)劃設(shè)計研究院有限公司,浙江 杭州 310006;2.黑龍江工程學(xué)院 測繪工程學(xué)院,黑龍江 哈爾濱 150050;3.廣州海洋地質(zhì)調(diào)查局,廣東 廣州 510760)
道路設(shè)計成果一般分為圖形文件、表格文件以及資料文檔等,其中各種表格文件最為精確,是勘測各階段的數(shù)學(xué)基礎(chǔ),怎樣高效合理地使用這些表格是外業(yè)路線測設(shè)和內(nèi)業(yè)數(shù)據(jù)處理的關(guān)鍵。為提高道路各勘測設(shè)計及施工階段內(nèi)外業(yè)數(shù)據(jù)處理的效率和準確性,針對過程中需要提取的重要數(shù)據(jù)進行批量和精確計算,進而進行進一步高精度測量放樣工作,獲取路線野外三維地面數(shù)據(jù)。因此,本文提出基于VSTO和.NET Framework技術(shù)開發(fā)出嵌入式程序用于道路相關(guān)各要素和坐標計算等工作。
.NET是微軟用來實現(xiàn)XML,Web Services,SOA(面向服務(wù)體系結(jié)構(gòu)Service-Oriented Architecture)與敏捷性的新技術(shù),是微軟的新一代技術(shù)平臺,是基于標準的、聯(lián)通的、適應(yīng)變化的、穩(wěn)定的和高性能的一種技術(shù)。一個.NET應(yīng)用是一個使用.NET Framework類庫來編寫,并運行于公共語言運行之上的應(yīng)用程序[1]。
.NET Framework的出現(xiàn),使得原來需要通過編程語言來實現(xiàn)的工作轉(zhuǎn)由.NET Framework來完成。操作系統(tǒng)也可以通過提供一些.NET Framework不支持的功能,降低程序間通信的復(fù)雜性與局限性。這些程序可以是相同語言編寫的,也可以是不同語言編寫的[2]。
VSTO(Visual Studio Tools for Office)是.NET平臺下最新的Office開發(fā)技術(shù)。相對傳統(tǒng)的VBA技術(shù),VSTO為中高級開發(fā)人員提供了強大的開發(fā)平臺和語言,并解決傳統(tǒng)Office開發(fā)中的諸多問題,開發(fā)人員也可以使用熟悉的技術(shù)來構(gòu)建更加靈活、強大、跨平臺的企業(yè)級解決方案[3-4]。對于Office解決方案開發(fā),VSTO是簡單而強大的框架。這個框架為每個Office開發(fā)者帶來了許多令人驚嘆的好處:窗體空間、類、安全性、服務(wù)器可測量性、面向?qū)ο筇卣?、完整性、易發(fā)布等[5-6]。
根據(jù)不同等級道路設(shè)計要求,道路設(shè)計中的平面線型包含不同線型要素,但都是由直線、緩和曲線、圓曲線3種基本單元構(gòu)成,如圖1所示;道路平面曲線的基本組合有:基本型(直線—入緩和曲線—圓曲線—出緩和曲線—直線)、卵型曲線、S型曲線、復(fù)合曲線、回頭曲線等[7-8]。
不同類型的線型各要素算法不同,需對不同線型單獨計算,然后按樁號首尾相接,為保證計算精度,本文保留數(shù)學(xué)模型中的高次項,各曲線類型數(shù)學(xué)模型[9-11]如下:
圖1 道路線路設(shè)計示意圖
如圖1所示,P點方位角即為JDi-1與JDi連線方位角αJDi-1JDi如式(1)所示[12-13]:
(1)
根據(jù)P點樁號和JDi-1樁號及直線方位角即可求出P點坐標,故P點坐標如式(2)所示:
(2)
式中,LP和LJDi-1分別為P點和JDi-1點的樁號,即l為P點與JDi-1的直線長度。
圓曲線上任一點中樁坐標(如圖1中K點)。
(3)
為保證上述數(shù)學(xué)模型中高次項能夠滿足計算精度要求,對高次項進行單獨計算,如式(4)所示:
(4)
dXK和dYK分別為高次項影響值,本文特選取杭州繞城高速直曲轉(zhuǎn)角表中半徑較小的數(shù)據(jù)進行驗證,特取ls1=220,R=1 800,αJDi-1JDi=45°。由式(4)可以得出dXM=-0.000 06 m,dYM=0.003 mm。
第一緩和曲線任一點的中樁坐標(如圖1中U點)
(5)
式中,w為路線轉(zhuǎn)角方向識別號,右偏時:w=1,左偏時:w=-1;當(dāng)U點位于第一緩和曲線上時,
為保證上述數(shù)學(xué)模型中高次項能夠滿足計算精度要求,對高次項進行單獨計算,如式(6)所示:
(6)
dXU和dYU分別為高次項計算值,為驗證高次項對計算結(jié)果的影響,本文特選取杭州繞城高速直曲轉(zhuǎn)角表中半徑較小的數(shù)據(jù)進行驗證,特取l=ls1=220,實際計算中l(wèi) M點處中樁坐標計算式如式(7)[14-15](見圖1): (7) 由于第一緩和曲線與第二緩和曲線數(shù)學(xué)模型一致,因此可以得出該數(shù)學(xué)模型中高次項能夠滿足計算精度要求,在此不再贅述。 邊樁坐標是在對應(yīng)中樁坐標和方位角的基礎(chǔ)上得出,如式(8)、式(9)所示。 路線左側(cè)邊樁坐標計算式[16]: (8) 路線右側(cè)邊樁坐標計算式[16]: (9) 合理的程序結(jié)構(gòu)設(shè)計是保證計算準確性的基礎(chǔ),也為后續(xù)開發(fā)各項功能提供接口,同時通過自檢能更加準確地檢核內(nèi)部數(shù)據(jù)計算的準確性。 程序具體設(shè)計框架如圖2所示。 圖2 程序結(jié)構(gòu)設(shè)計流程圖 本程序有兩種資料錄入方法。 方法一:輸入路線起點樁號、交點坐標以及入緩和曲線和出緩和曲線長度,并生成對應(yīng)的直曲轉(zhuǎn)角表; 方法二:直接讀取設(shè)計直曲轉(zhuǎn)角表。根據(jù)計算和設(shè)計提供的直曲轉(zhuǎn)角表對設(shè)計線路進行一致性檢核,檢測設(shè)計線路是否完整。 后臺保存線位各段主點要素,然后根據(jù)待計算樁號所處曲線段和坐標計算模型計算對應(yīng)坐標;該坐標與設(shè)計坐標進行逐樁做標記性對比檢核,判斷計算準確性和精度。 此外根據(jù)式(6)和(7)計算橫斷面成果坐標。 4.3.1 程序界面設(shè)計 本文程序是Excel二次開發(fā)的嵌入式程序,程序界面如圖3所示。 4.3.2 程序代碼編寫 C#是面向?qū)ο笤O(shè)計的程序語言,為更好地維護和拓展程序,本程序?qū)iT設(shè)計道路數(shù)據(jù)處理的類HintRoadClass和不同曲線類型的數(shù)據(jù)結(jié)構(gòu),如表1所示定義變量及函數(shù),程序中的主要功能函數(shù)代碼如下。 1)建立基本應(yīng)用工作表 for(intiNumsht=sheetName.Length - 1; iNumsht >= 0; iNumsht--){_wb.Sheets.Add(); _wb.ActiveSheet.name=sheetName[iNumsht];} 2)根據(jù)設(shè)計參數(shù)生成直曲轉(zhuǎn)角表 q1 = pm[2,4]/2-ath.Pow(pm[2,4],3)/ (240 * Math.Pow(pm[2,3],2)) + Math.Pow(pm[2,4],5) / (34560 * Math.Pow(pm[2,3],4)); 表1 程序結(jié)構(gòu) 圖3 程序操作界面 q2 = pm[2,5]/2-ath.Pow(pm[2,5],3)/(240*Math.Pow(pm[2,3],2))+Math.Pow(pm[2,5],5)/(34560 * Math.Pow(pm[2,3],4)); p1 = Math.Pow(pm[2,4],2)/(24 * pm[2,3])-Math.Pow(pm[2,4],4) / (2688 * Math.Pow(pm[2,3],3)) + Math.Pow(pm[2,4],6)/(506880 * Math.Pow(pm[2,3],5)); p2 = Math.Pow(pm[2,5],2)/(24 * pm[2,3])-ath.Pow(pm[2,5],4)/(2688*Math.Pow(pm[2,3],3))+Math.Pow(pm[2,5],6)/(506880 * Math.Pow(pm[2,3],5)); t1 = q1 + (pm[2,3] + p2-m[2,3]+p1)*Math.Cos(pj))/Math.Sin(pj); t2 = q2 + (pm[2,3] + p1-m[2,3]+p2)*Math.Cos(pj))/Math.Sin(pj); ly = pm[2,3] * pj - (pm[2,4] + pm[2,5]) / 2; 其中q1、q2、p1、p2、t1、t2、ly分別為曲線要素。 3)中樁坐標計算 中樁坐標計算分多種情況,需采用不同的數(shù)學(xué)模型,此處只列舉代碼片段,如下: l = lxzh - kzh; tp = (2 * l - ls1) / 2 / R; xp = R * Math.Sin(tp) + q1; yp = R * (1 - Math.Cos(tp)) + p1; x = x1 + xp * Math.Cos(a0) - zy * yp * Math.Sin(a0); y = y1 + xp * Math.Sin(a0) + zy * yp * Math.Cos(a0); 本文以浙江省某高速公路項目為測試對象,選取其中一段設(shè)計數(shù)據(jù)進行測試,同時闡述程序操作流程,并對計算結(jié)果進行精度統(tǒng)計。 啟動Excel軟件后,點擊“路線表格準備”按鈕,即生成所需工作表,如圖4所示。 圖4 程序生成工作表 將設(shè)計參數(shù)錄入“平面資料”表中,執(zhí)行“生成直曲轉(zhuǎn)表”,即在“直曲線表”中計算載入數(shù)據(jù),同時讀取設(shè)計直曲轉(zhuǎn)角表并與該表進行詳細檢核比對,如圖5所示。 圖5 直曲轉(zhuǎn)角精度及計算結(jié)果 將待計算樁號和橫斷面數(shù)據(jù)錄入相應(yīng)表格即可計算出相應(yīng)坐標等,如圖6所示。限于篇幅有限,在此不一一列舉。 圖6 道路中樁坐標計算結(jié)果 此外程序自動將計算成果與設(shè)計坐標逐個進行對比,生成精度檢核報表,如表2所示。 表2 計算結(jié)果精度統(tǒng)計表 因篇幅所限,省略了程序運行中的部分界面及計算成果表。 本文研究了道路設(shè)計參數(shù)數(shù)學(xué)模型,編寫了基于VSTO、Excel和.NET開發(fā)平臺的道路數(shù)據(jù)處理程序,實現(xiàn)了直線段、入緩和曲線、圓曲線、出緩和曲線段主點坐標以及任一點坐標和方位角的計算,通過保留更高迭代項以提高計算模型的精度,并對各階段成果進行檢核,同時對計算結(jié)果統(tǒng)計分析形成報表。程序能在可靠性、效率、精度以及適應(yīng)性等方面滿足道路測設(shè)放樣要求。同時,對程序結(jié)構(gòu)和功能的優(yōu)化設(shè)計,為今后開發(fā)更多功能提供相應(yīng)接口,有利于程序進一步的拓展,以便更高效、更準確完成今后道路測設(shè)工作。 本文僅對完整線路進行研究和開發(fā),而對于卵型曲線等非完整線位尚有待進一步研究和探討。3.4 第二緩和曲線上任一點中樁坐標
3.5 邊樁坐標計算
4 道路上任一點坐標計算程序設(shè)計
4.1 程序結(jié)構(gòu)設(shè)計
4.2 程序功能設(shè)計
4.3 程序具體實現(xiàn)
5 程序測試與工程實踐
6 結(jié)束語