常君鋒,孫增輝,王 月
(1.中國有色金屬工業西安勘察設計研究院有限公司,陜西 西安 710054)
公路橫斷面測量即根據設計文件確定的線路中線,按照一定的間距實際測量與路線正交方向上的地形變化點,可用于路基、擋墻、防護工程等方案的設計以及土石方工程數量的計算。目前橫斷面測量的方法主要包括水準儀—皮尺法、GPS-RTK法、全站儀法、經緯儀視距法、架置式無棱鏡激光測距儀法、數字地面模型法、手持式無棱鏡激光測距儀法、水準儀法和抬桿法等。測量后的數據需整理成不同的數據格式,以便不同公路設計軟件應用。
隨著高速公路從平原微丘區向山嶺重丘區延伸,路線方案所經過的地形條件越來越復雜,部分路段的地形極其破碎,采用常規測量方法難度大、效率低,且正確的橫斷面方向也難以保證。本文利用Visual LISP語言編制了相應軟件,結合不規則三角網(TIN)模型和實測地形圖數據,對路線橫斷面數據自動提取方法進行了探討。
橫斷面測量是測定中樁兩側垂直于中線的地面 線[1],即按一定的間距測量路線中樁點法線方向上設計范圍內的地表起伏特征點。常規的橫斷面測量方法為:在中樁上架設好儀器,對中整平后,瞄準垂直于路線的橫斷面方向,指揮移動棱鏡在每個高程變化點處立鏡,并測量距離和高差(或直接測量高程);也可利用全站儀自帶的對邊測量功能測量所需的斷面數據。
全要素高程測量是指采用全站儀、GPS-RTK等測量儀器對線路中線兩側預測橫斷面寬度范圍進行三維坐標測量。全要素高程測量主要采用極坐標法測量地形點,根據全站儀的觀測精度,在幾百 m距離范圍內的誤差均在1 cm左右[2]。采集要素主要為地形特征點高程、特征線高程以及居民地、道路、境界、水系、植被與獨立地物等的三維信息,即陡坎上下邊緣線、塘底、塘堤、坡腳高程、坡頂高程、地形變換點等的三維坐標,這些特征點一定要測量。實地測量的平面和高程精度應不低于JTG C10-2007《公路勘測規范》中橫斷面測量精度的要求[3]。碎部點采集完成后,內業在AutoCAD中展點,并按要素進行編輯處理。外業高程局部施測點分布如圖1所示。

圖1 外業高程局部施測圖
橫斷面數據提取結果如圖2所示,圖中粗虛線為預提取的橫斷面線,在AutoCAD中,利用Visual LISP語言的SSGET函數可得到與之相交的所有實體選擇集[4],逐條求解所有選取的目標與中線的交點坐標、高程,再計算該點與中線的距離,即可得到該橫斷面數據。

圖2 橫斷面數據提取結果
3.1.1 中樁坐標與方位角計算
通常設計單位都會提供路線方案的中線坐標文件,這時可選用Visual LISP語言中的以下函數來獲取中線實體目標[5]:①利用setq zx(ssget)獲取中線實體; ②利用setq ent(ssname zx 0)獲取中線圖元名; ③利用setq pt_xy(xyp-get-CurvePointAtDist ent(-kp Qdzh))語句獲得曲線某點(點(kp)與中線起點(Qdzh)的距離)的坐標;④利用setq af(xyp-get-AngleAtPoint ent xpt)語句獲得曲線上某點(kp)的切線方位角。
3.1.2 橫斷面左右邊界點坐標計算
利用Visual LISP語言中的polar函數以及計算得到的中樁坐標(pt_xy)、切線方位角(af)、左邊線距離(zbxjl)、右邊線距離(ybxjl)即可計算得到橫斷面左邊界點和右邊界點坐標(圖2中A、B點),即
setq pt_z (polar pt_xy (- af (* 0.5 pi)) zbxjl)
setq pt_y (polar pt_xy (+ af (* 0.5 pi)) ybxjl)
3.1.3 橫斷面相交實體選擇
得到橫斷面左右兩端點坐標后,可通過以下語句獲得與之相交的實體:
setq ptlist (list pt_z pt_y)
setq ssdmx (ssget "CP" ptlist)
通過setq ndm_s(sslength ssdmx)語句獲得與橫斷面線相交的實體個數,再逐一求解橫斷面線與選擇實體的交點坐標、高程。
一般情況下,橫斷面左右兩端點不一定與其他地物相交,如圖2中 A、B點,因此計算其左右兩端點高程,需按端點附近高程點進行計算。
3.2.1 TIN構建
以一定的半徑在端點(以A為例)附近搜索所有高程點,并組建TIN,具體流程如圖3所示。構建的TIN如圖4所示。

圖3 求解高程點流程圖

圖4 TIN構建結果
3.2.2 高程計算
建立TIN后,即可由TIN求解該區域內任意一點的高程。一般情況下采用線性內插的方法,即以三角形三點確定的斜平面作為地表面進行三角網內插,具體步驟為:
1)格網點檢索。給定一點的平面坐標P(x,y),要基于TIN內插該點的高程H,首先需確定P點落在 哪個TIN三角形中。常用方法是通過距離計算得到距P點最近的點,設為Q1;依次取出以Q1為頂點的三角形,判斷P點是否位于該三角形內,可通過P點是否與該三角形每一頂點在該頂點所對邊的同側加以判斷;若P點不在以Q1為頂點的任意一個三角形中,則取離P點次最近的格網點,重復上述處理,直至確定P點所在的三角形,即檢索到用于內插P點高程的3個格網點[6]。
2)高程內插。假設P(x,y)所在的三角形為ΔQ1Q2Q3,3個頂點坐標為(x1,y1,h1)、(x2,y2,h2)和(x3,y3,h3),則由Q1、Q2、Q3確定的平面方程為:

或

令

則P點的高程為:

采用相同方法可求得右端點和中點的高程。
3.2.3 坎的屬性判別與高程計算
CASS軟件是目前國內CAD外業數字化成圖的主要軟件之一,操作簡單、程序化高。CASS軟件在數據結構上與CAD軟件有所不同,CASS自定義了擴展代碼,因此有必要研究CASS的數據格式,以便提取CASS數據格式擴展數據[7]。
1)CASS外部擴展屬性數據格式。-3 ("SOUTH" (1000. "204201") (1040 . 1.5))是CASS的外部擴展屬性,其中“SOUTH”(南方)為外部擴展屬性名稱,“204201”為CASS內部代碼,利用CAD的List是查不出來的,因此查看外部擴展屬性數據需采用其他方法。
2)讀取坎高屬性。通過對CASS數據格式的研究,可通過以下語句獲得坎高信息:
setq pgc (cdr(car(cdr(cdr(cadr (assoc -3 (entget PA '("SOUTH"))))))));坎高(或其他擴展信息)
3.2.4 橫斷面數據排序
通過橫斷面線相交實體選取、交點坐標與高程點計算后,得到一系列數據xy_List,但這些數據需經處理才能成為標準橫斷面數據。按從左到右的順序對數據xy_List進行排序,執行語句為:
setq xy_list (vl-sort xy_list (function (lambda (e1 e2)
(< (* (distance pt_z (list (car e1) (cadr e1) 0)))
(* (distance pt_z (list (car e2) (cadr e2) 0)))))))
3.2.5 橫斷面數據輸出
通常橫斷面數據要求的格式為距中樁(或前一點) 的距離、高程或高差,并非上述解算的點坐標和高程數據,因此需要對坐標數據進行計算,可通過VLISP中的基本函數功能來實現。①利用setq hdm_file (getfiled "保存橫斷面數據文件!" path_cad "txt" 1)保存橫斷面數據文件名;②利用setq file_hd(open hdm_file "w")輸寫方式打開文件;③利用setq dd(distance pt_xy(list(car pt)(cadr pt)0))計算各點距中樁的距離; ④利用setq gcjc(-(caddr pt)zzgc)計算各點與中樁高程的高差;⑤利用setq hdsj (strcat hdsj (rtos dd 2 2) "," (rtos gcjc 2 2))組成距離、高差數據;⑥利用write-line hdsj file_hd在文件中寫入橫斷面數據。
針對如何在地形破碎、交通不便區域快速、準確地獲取路線橫斷面數據的問題,本文基于Visual LISP語言對AutoCAD進行了二次開發,實踐表明:①采用全要素地形測量與Visual LISP語言編制軟件自動提取數據相結合的方法,能快速、高質量地獲取橫斷面數據信息,大大提高生產效率;②在全要素地形測量中,應注意地形特征點、特征線的高程采樣; ③在構建TIN時,應判斷三角網與地性線、坡坎線的相交問題;④計算高程時,應遍歷TIN,所求點位置必須落在某三角形內,否則應擴大搜索半徑,重新組建TIN,直至滿足要求為止。