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