常君鋒,孫增輝,王 月
(1.中國有色金屬工業(yè)西安勘察設(shè)計(jì)研究院有限公司,陜西 西安 710054)
公路橫斷面測量即根據(jù)設(shè)計(jì)文件確定的線路中線,按照一定的間距實(shí)際測量與路線正交方向上的地形變化點(diǎn),可用于路基、擋墻、防護(hù)工程等方案的設(shè)計(jì)以及土石方工程數(shù)量的計(jì)算。目前橫斷面測量的方法主要包括水準(zhǔn)儀—皮尺法、GPS-RTK法、全站儀法、經(jīng)緯儀視距法、架置式無棱鏡激光測距儀法、數(shù)字地面模型法、手持式無棱鏡激光測距儀法、水準(zhǔn)儀法和抬桿法等。測量后的數(shù)據(jù)需整理成不同的數(shù)據(jù)格式,以便不同公路設(shè)計(jì)軟件應(yīng)用。
隨著高速公路從平原微丘區(qū)向山嶺重丘區(qū)延伸,路線方案所經(jīng)過的地形條件越來越復(fù)雜,部分路段的地形極其破碎,采用常規(guī)測量方法難度大、效率低,且正確的橫斷面方向也難以保證。本文利用Visual LISP語言編制了相應(yīng)軟件,結(jié)合不規(guī)則三角網(wǎng)(TIN)模型和實(shí)測地形圖數(shù)據(jù),對路線橫斷面數(shù)據(jù)自動(dòng)提取方法進(jìn)行了探討。
橫斷面測量是測定中樁兩側(cè)垂直于中線的地面 線[1],即按一定的間距測量路線中樁點(diǎn)法線方向上設(shè)計(jì)范圍內(nèi)的地表起伏特征點(diǎn)。常規(guī)的橫斷面測量方法為:在中樁上架設(shè)好儀器,對中整平后,瞄準(zhǔn)垂直于路線的橫斷面方向,指揮移動(dòng)棱鏡在每個(gè)高程變化點(diǎn)處立鏡,并測量距離和高差(或直接測量高程);也可利用全站儀自帶的對邊測量功能測量所需的斷面數(shù)據(jù)。
全要素高程測量是指采用全站儀、GPS-RTK等測量儀器對線路中線兩側(cè)預(yù)測橫斷面寬度范圍進(jìn)行三維坐標(biāo)測量。全要素高程測量主要采用極坐標(biāo)法測量地形點(diǎn),根據(jù)全站儀的觀測精度,在幾百 m距離范圍內(nèi)的誤差均在1 cm左右[2]。采集要素主要為地形特征點(diǎn)高程、特征線高程以及居民地、道路、境界、水系、植被與獨(dú)立地物等的三維信息,即陡坎上下邊緣線、塘底、塘堤、坡腳高程、坡頂高程、地形變換點(diǎn)等的三維坐標(biāo),這些特征點(diǎn)一定要測量。實(shí)地測量的平面和高程精度應(yīng)不低于JTG C10-2007《公路勘測規(guī)范》中橫斷面測量精度的要求[3]。碎部點(diǎn)采集完成后,內(nèi)業(yè)在AutoCAD中展點(diǎn),并按要素進(jìn)行編輯處理。外業(yè)高程局部施測點(diǎn)分布如圖1所示。
圖1 外業(yè)高程局部施測圖
橫斷面數(shù)據(jù)提取結(jié)果如圖2所示,圖中粗虛線為預(yù)提取的橫斷面線,在AutoCAD中,利用Visual LISP語言的SSGET函數(shù)可得到與之相交的所有實(shí)體選擇集[4],逐條求解所有選取的目標(biāo)與中線的交點(diǎn)坐標(biāo)、高程,再計(jì)算該點(diǎn)與中線的距離,即可得到該橫斷面數(shù)據(jù)。
圖2 橫斷面數(shù)據(jù)提取結(jié)果
3.1.1 中樁坐標(biāo)與方位角計(jì)算
通常設(shè)計(jì)單位都會(huì)提供路線方案的中線坐標(biāo)文件,這時(shí)可選用Visual LISP語言中的以下函數(shù)來獲取中線實(shí)體目標(biāo)[5]:①利用setq zx(ssget)獲取中線實(shí)體; ②利用setq ent(ssname zx 0)獲取中線圖元名; ③利用setq pt_xy(xyp-get-CurvePointAtDist ent(-kp Qdzh))語句獲得曲線某點(diǎn)(點(diǎn)(kp)與中線起點(diǎn)(Qdzh)的距離)的坐標(biāo);④利用setq af(xyp-get-AngleAtPoint ent xpt)語句獲得曲線上某點(diǎn)(kp)的切線方位角。
3.1.2 橫斷面左右邊界點(diǎn)坐標(biāo)計(jì)算
利用Visual LISP語言中的polar函數(shù)以及計(jì)算得到的中樁坐標(biāo)(pt_xy)、切線方位角(af)、左邊線距離(zbxjl)、右邊線距離(ybxjl)即可計(jì)算得到橫斷面左邊界點(diǎn)和右邊界點(diǎn)坐標(biāo)(圖2中A、B點(diǎn)),即
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 橫斷面相交實(shí)體選擇
得到橫斷面左右兩端點(diǎn)坐標(biāo)后,可通過以下語句獲得與之相交的實(shí)體:
setq ptlist (list pt_z pt_y)
setq ssdmx (ssget "CP" ptlist)
通過setq ndm_s(sslength ssdmx)語句獲得與橫斷面線相交的實(shí)體個(gè)數(shù),再逐一求解橫斷面線與選擇實(shí)體的交點(diǎn)坐標(biāo)、高程。
一般情況下,橫斷面左右兩端點(diǎn)不一定與其他地物相交,如圖2中 A、B點(diǎn),因此計(jì)算其左右兩端點(diǎn)高程,需按端點(diǎn)附近高程點(diǎn)進(jìn)行計(jì)算。
3.2.1 TIN構(gòu)建
以一定的半徑在端點(diǎn)(以A為例)附近搜索所有高程點(diǎn),并組建TIN,具體流程如圖3所示。構(gòu)建的TIN如圖4所示。
圖3 求解高程點(diǎn)流程圖
圖4 TIN構(gòu)建結(jié)果
3.2.2 高程計(jì)算
建立TIN后,即可由TIN求解該區(qū)域內(nèi)任意一點(diǎn)的高程。一般情況下采用線性內(nèi)插的方法,即以三角形三點(diǎn)確定的斜平面作為地表面進(jìn)行三角網(wǎng)內(nèi)插,具體步驟為:
1)格網(wǎng)點(diǎn)檢索。給定一點(diǎn)的平面坐標(biāo)P(x,y),要基于TIN內(nèi)插該點(diǎn)的高程H,首先需確定P點(diǎn)落在 哪個(gè)TIN三角形中。常用方法是通過距離計(jì)算得到距P點(diǎn)最近的點(diǎn),設(shè)為Q1;依次取出以Q1為頂點(diǎn)的三角形,判斷P點(diǎn)是否位于該三角形內(nèi),可通過P點(diǎn)是否與該三角形每一頂點(diǎn)在該頂點(diǎn)所對邊的同側(cè)加以判斷;若P點(diǎn)不在以Q1為頂點(diǎn)的任意一個(gè)三角形中,則取離P點(diǎn)次最近的格網(wǎng)點(diǎn),重復(fù)上述處理,直至確定P點(diǎn)所在的三角形,即檢索到用于內(nèi)插P點(diǎn)高程的3個(gè)格網(wǎng)點(diǎn)[6]。
2)高程內(nèi)插。假設(shè)P(x,y)所在的三角形為ΔQ1Q2Q3,3個(gè)頂點(diǎn)坐標(biāo)為(x1,y1,h1)、(x2,y2,h2)和(x3,y3,h3),則由Q1、Q2、Q3確定的平面方程為:
或
令
則P點(diǎn)的高程為:
采用相同方法可求得右端點(diǎn)和中點(diǎn)的高程。
3.2.3 坎的屬性判別與高程計(jì)算
CASS軟件是目前國內(nèi)CAD外業(yè)數(shù)字化成圖的主要軟件之一,操作簡單、程序化高。CASS軟件在數(shù)據(jù)結(jié)構(gòu)上與CAD軟件有所不同,CASS自定義了擴(kuò)展代碼,因此有必要研究CASS的數(shù)據(jù)格式,以便提取CASS數(shù)據(jù)格式擴(kuò)展數(shù)據(jù)[7]。
1)CASS外部擴(kuò)展屬性數(shù)據(jù)格式。-3 ("SOUTH" (1000. "204201") (1040 . 1.5))是CASS的外部擴(kuò)展屬性,其中“SOUTH”(南方)為外部擴(kuò)展屬性名稱,“204201”為CASS內(nèi)部代碼,利用CAD的List是查不出來的,因此查看外部擴(kuò)展屬性數(shù)據(jù)需采用其他方法。
2)讀取坎高屬性。通過對CASS數(shù)據(jù)格式的研究,可通過以下語句獲得坎高信息:
setq pgc (cdr(car(cdr(cdr(cadr (assoc -3 (entget PA '("SOUTH"))))))));坎高(或其他擴(kuò)展信息)
3.2.4 橫斷面數(shù)據(jù)排序
通過橫斷面線相交實(shí)體選取、交點(diǎn)坐標(biāo)與高程點(diǎn)計(jì)算后,得到一系列數(shù)據(jù)xy_List,但這些數(shù)據(jù)需經(jīng)處理才能成為標(biāo)準(zhǔn)橫斷面數(shù)據(jù)。按從左到右的順序?qū)?shù)據(jù)xy_List進(jìn)行排序,執(zhí)行語句為:
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 橫斷面數(shù)據(jù)輸出
通常橫斷面數(shù)據(jù)要求的格式為距中樁(或前一點(diǎn)) 的距離、高程或高差,并非上述解算的點(diǎn)坐標(biāo)和高程數(shù)據(jù),因此需要對坐標(biāo)數(shù)據(jù)進(jìn)行計(jì)算,可通過VLISP中的基本函數(shù)功能來實(shí)現(xiàn)。①利用setq hdm_file (getfiled "保存橫斷面數(shù)據(jù)文件!" path_cad "txt" 1)保存橫斷面數(shù)據(jù)文件名;②利用setq file_hd(open hdm_file "w")輸寫方式打開文件;③利用setq dd(distance pt_xy(list(car pt)(cadr pt)0))計(jì)算各點(diǎn)距中樁的距離; ④利用setq gcjc(-(caddr pt)zzgc)計(jì)算各點(diǎn)與中樁高程的高差;⑤利用setq hdsj (strcat hdsj (rtos dd 2 2) "," (rtos gcjc 2 2))組成距離、高差數(shù)據(jù);⑥利用write-line hdsj file_hd在文件中寫入橫斷面數(shù)據(jù)。
針對如何在地形破碎、交通不便區(qū)域快速、準(zhǔn)確地獲取路線橫斷面數(shù)據(jù)的問題,本文基于Visual LISP語言對AutoCAD進(jìn)行了二次開發(fā),實(shí)踐表明:①采用全要素地形測量與Visual LISP語言編制軟件自動(dòng)提取數(shù)據(jù)相結(jié)合的方法,能快速、高質(zhì)量地獲取橫斷面數(shù)據(jù)信息,大大提高生產(chǎn)效率;②在全要素地形測量中,應(yīng)注意地形特征點(diǎn)、特征線的高程采樣; ③在構(gòu)建TIN時(shí),應(yīng)判斷三角網(wǎng)與地性線、坡坎線的相交問題;④計(jì)算高程時(shí),應(yīng)遍歷TIN,所求點(diǎn)位置必須落在某三角形內(nèi),否則應(yīng)擴(kuò)大搜索半徑,重新組建TIN,直至滿足要求為止。