





摘 要:在市政道路勘測(cè)中,橫斷面數(shù)據(jù)提取是常見的內(nèi)業(yè)工作任務(wù)之一。對(duì)所采集的橫斷面數(shù)據(jù)進(jìn)行分析時(shí),通常需要內(nèi)業(yè)人員通過AutoCAD軟件逐個(gè)量取數(shù)據(jù),存在工作效率低、工作量大、數(shù)據(jù)易錯(cuò)等問題。文章利用AutoLISP語言在AutoCAD軟件中二次開發(fā)程序,實(shí)現(xiàn)了圖中橫斷面線上的斷面點(diǎn)全自動(dòng)化輸出為三行一組橫斷面數(shù)據(jù)格式,避免了手工重復(fù)量取、錄入的煩瑣工作。實(shí)踐證明,該方法有效提高了內(nèi)業(yè)工作效率與數(shù)據(jù)質(zhì)量,稍微修改程序還可提取并輸出不同的橫斷面數(shù)據(jù)格式。
關(guān)鍵詞:AutoLISP;道路勘測(cè);橫斷面數(shù)據(jù)
中圖分類號(hào):TP39 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2025)02-0158-05
Automatic Output of Road Cross-section Data Based on AutoLISP
PENG Yining
(Shanghai Jiyuan Construction Engineering Consulting Co., Ltd., Shanghai 201700, China)
Abstract: In the survey of municipal roads, cross-section data extraction is one of the common interior work tasks. During the analysis of collected cross-section data, the data usually needs to be measured one by one by the interior staff through AutoCAD software, and there are problems of low work efficiency, large workload, and error-prone data. This paper uses AutoLISP language to carry out secondary development of program in AutoCAD software, and it realizes that the cross-section points on the cross-section line in the map could output with full-automation into cross-section data format of three rows per group, avoiding manual and repeated measurement and trouble input process. The practice has proven that this method effectively improves the efficiency and data quality of interior work, and it can also extract and output various cross-section data formats with minor modifications to the program.
Keywords: AutoLISP; road survey; cross-section data
DOI:10.19850/j.cnki.2096-4706.2025.02.030
0 引 言
在市政道路勘測(cè)設(shè)計(jì)階段,需要進(jìn)行道路勘測(cè),其主要任務(wù)和工作是為設(shè)計(jì)提供真實(shí)可靠的測(cè)量數(shù)據(jù),測(cè)量數(shù)據(jù)包括道路帶狀地形數(shù)據(jù)、斷面數(shù)據(jù)等,道路斷面圖能直觀的體現(xiàn)現(xiàn)狀地形起伏情況,其中橫斷面是道路設(shè)計(jì)及填挖土方量預(yù)算的重要依據(jù),從而需要測(cè)量人員進(jìn)行野外斷面測(cè)量工作,橫斷面測(cè)量一般采用常規(guī)測(cè)量實(shí)測(cè)或建立DEM模型、TIN構(gòu)建不規(guī)則三角網(wǎng)、生成等高線等方法內(nèi)插生成橫斷面點(diǎn),內(nèi)業(yè)則按設(shè)計(jì)要求的三行一組格式提供道路設(shè)計(jì)中線樁上的橫斷面數(shù)據(jù)。制作橫斷面數(shù)據(jù)常規(guī)操作是測(cè)量技術(shù)人員內(nèi)業(yè)使用AutoCAD軟件采用傳統(tǒng)手工方法通過每條橫斷面線上的斷面點(diǎn)逐個(gè)量取至中樁間距并記錄至Excel文檔的工作,此過程給測(cè)量技術(shù)人員帶來了大量重復(fù)煩瑣的工作,不僅效率低且數(shù)據(jù)容易出錯(cuò)等現(xiàn)實(shí)問題困擾著測(cè)量技術(shù)人員[1-4],或者使用常用的CASS軟件提取橫斷面數(shù)據(jù),但斷面數(shù)據(jù)格式不符合設(shè)計(jì)要求,需要使用專用的轉(zhuǎn)換程序[5-6],當(dāng)內(nèi)業(yè)使用半自動(dòng)程序輸出時(shí),雖然工作效率有所提高,但還是需要手工方式對(duì)每條橫斷面逐個(gè)選取,效果不太理想,因此迫切需要通過一種新的提取輸出方式來改變這一現(xiàn)狀[7]。
基于上述問題與橫斷面數(shù)據(jù)格式分析,借助AutoCAD軟件二次開發(fā)的開放性,AutoLISP程序語言簡(jiǎn)單易學(xué)的特性,本文提出基于AutoLISP語言在AutoCAD軟件二次開發(fā)實(shí)現(xiàn)自動(dòng)提取輸出三行一組橫斷面數(shù)據(jù)的方法,可以使得橫斷面數(shù)據(jù)提取輸出作業(yè)實(shí)現(xiàn)完全自動(dòng)化,該方法可有效提高內(nèi)業(yè)工作效率與數(shù)據(jù)質(zhì)量。
1 AutoCAD二次開發(fā)概述
隨著AutoCAD制圖軟件在工程測(cè)量行業(yè)的廣泛應(yīng)用,使用開放的體系結(jié)構(gòu),允許用戶可以采用嵌入式的開發(fā)語言對(duì)其進(jìn)行功能擴(kuò)充,滿足用戶特殊的要求,合理應(yīng)用AutoCAD二次開發(fā)技術(shù),可以根據(jù)數(shù)據(jù)類型、數(shù)據(jù)成果等特點(diǎn)進(jìn)行針對(duì)性的二次開發(fā)。
LISP是表處理程序語言,在人工智能學(xué)科領(lǐng)域廣泛采用,AutoLISP由AUTODESK公司在LISP語言基礎(chǔ)上開發(fā)的一種僅能運(yùn)行于AutoCAD內(nèi)部的解釋型程序語言,用于擴(kuò)展和定制AutoCAD軟件功能,該程序語言簡(jiǎn)單易懂,非常易于理解和閱讀,內(nèi)含于AutoCAD軟件中,不挑剔編輯環(huán)境,文本編輯器即可編寫,與AutoCAD緊密集成,可直接訪問和操作AutoCAD中的對(duì)象和功能,AutoLISP語言所有成分都是以函數(shù)形式,沒有語句概念與其他語法結(jié)構(gòu),提供了一系列函數(shù)調(diào)用,統(tǒng)一表達(dá)式為表結(jié)構(gòu),可以直接調(diào)用執(zhí)行AutoCAD命令,AutoLISP的特點(diǎn)在AutoCAD二次開發(fā)中成為最主要的基礎(chǔ)開發(fā)工具之一,通過命令A(yù)PPLOAD加載后使用,基本結(jié)構(gòu)如下:
(defun c:**();自定義命令函數(shù)聲明
(vl-load-com);加載ActiveX擴(kuò)展函數(shù)
(setq **);變量聲明
(……);實(shí)現(xiàn)代碼
)
用戶定義的函數(shù),**為啟動(dòng)命令,AutoCAD加載此函數(shù)后輸入此命令執(zhí)行
2 數(shù)據(jù)采集與分析
2.1 數(shù)據(jù)采集
橫斷面點(diǎn)是各中樁處垂直于路線方向上的地形起伏點(diǎn),在市政道路勘測(cè)實(shí)際工作中目前常用的獲得橫斷面點(diǎn)方式大多使用全站儀[8]、RTK常規(guī)野外測(cè)量,沿著橫斷面方向,根據(jù)實(shí)際地形變化走勢(shì)實(shí)測(cè)采集獲取斷面點(diǎn)三維坐標(biāo)數(shù)據(jù)或使用地形碎步點(diǎn)構(gòu)建不規(guī)則三角網(wǎng)、建立DEM模型、生成等高線、實(shí)景三維數(shù)據(jù)、機(jī)載激光雷達(dá)[9]等方式獲取、內(nèi)插生成橫斷面線上的斷面點(diǎn)三維坐標(biāo)數(shù)據(jù)。當(dāng)采用實(shí)測(cè)時(shí),野外測(cè)量時(shí)應(yīng)保持左、右方向上的斷面點(diǎn)大致在一個(gè)方向上,目前隨著RTK技術(shù)發(fā)展[10],RTK測(cè)量技術(shù)表現(xiàn)出了極大的優(yōu)勢(shì),RTK自帶橫斷面測(cè)量功能,使得采用常規(guī)野外測(cè)量橫斷面點(diǎn)時(shí)不會(huì)偏離斷面方向,且不受橫向通視條件限制,在市政道路勘測(cè)中使用RTK實(shí)測(cè)采集橫斷面點(diǎn)應(yīng)當(dāng)作為首選。
如圖1中的市政道路中線及橫斷面線由設(shè)計(jì)單位提供,橫斷面線也可通過設(shè)計(jì)要求左右側(cè)寬度數(shù)據(jù)使用南方CASS軟件自動(dòng)生成,道路中樁數(shù)據(jù)由野外測(cè)設(shè)作業(yè)采集獲得。當(dāng)獲取中樁、橫斷面點(diǎn)三維坐標(biāo)數(shù)據(jù)后,內(nèi)業(yè)在AutoCAD為平臺(tái)分別展出中樁及橫斷面點(diǎn),展點(diǎn)后的橫斷面點(diǎn)以中樁為中心分布于橫斷面線上左、右兩側(cè),采用實(shí)測(cè)展出的斷面點(diǎn)時(shí),偶爾會(huì)產(chǎn)生方向偏差,展點(diǎn)后不一定全在橫斷面線上,偏差點(diǎn)在偏差范圍內(nèi)應(yīng)處理至橫斷面線上,便于后續(xù)提取輸出,在些不再贅述。
2.2 數(shù)據(jù)分析
根據(jù)設(shè)計(jì)單位提出的三行一組橫斷面數(shù)據(jù)格式要求,使用TXT或Excel文件作為存儲(chǔ)載體,文件內(nèi)容中的數(shù)據(jù)是按道路設(shè)計(jì)中樁的順序?yàn)槊織l橫斷面,其每條橫斷面格式是第一行為里程樁號(hào),第二行為中線前進(jìn)方向左側(cè)斷面數(shù)據(jù),斷面點(diǎn)相對(duì)中樁平距、絕對(duì)高程為一對(duì)數(shù)據(jù),依次向后由近至遠(yuǎn)填寫,如使用TXT文件需用“,”符號(hào)隔開,第三行為右側(cè)斷面數(shù)據(jù),數(shù)據(jù)格式和左邊一樣,此三行為一中樁處完整的橫斷面數(shù)據(jù),其余中樁類似。數(shù)據(jù)格式如表1所示。
為了提取輸出滿足于設(shè)計(jì)要求的三行一組橫斷面數(shù)據(jù)格式,本文結(jié)合圖1為參考介紹使用AutoLISP編程選擇中線后獲取中樁、橫斷面線、橫斷面點(diǎn)三維坐標(biāo)數(shù)據(jù)后自動(dòng)提取輸出橫斷面數(shù)據(jù)的過程方法。
3 程序原理及流程
通過圖1所示的中線、中樁、橫斷面線、橫斷面點(diǎn)、橫斷面數(shù)據(jù)格式分析得出,道路中線為PLINE多段線,橫斷面線為LINE直線,中樁為符號(hào)塊,橫斷面點(diǎn)為符號(hào)塊。中線上的中樁符號(hào)是生成橫斷面數(shù)據(jù)的基礎(chǔ),橫斷面線及橫斷面點(diǎn)數(shù)據(jù)具有規(guī)律性,橫斷面線沿著中線方向布置,且橫斷面點(diǎn)都在橫斷面線上,通過對(duì)圖上道路中線、中樁、橫斷面線、橫斷面點(diǎn)實(shí)體的獲取,按實(shí)體特定的規(guī)則循環(huán)遍歷,采用AutoLISP語言完全可實(shí)現(xiàn)自動(dòng)提取輸出三行一組橫斷面數(shù)據(jù)的功能。程序中只要獲取中樁至中線起點(diǎn)的距離,即可提取輸出第一行的里程數(shù)據(jù),再按中樁與橫斷面線起點(diǎn)獲取左側(cè)所有橫斷面點(diǎn),通過橫斷面點(diǎn)坐標(biāo)與中樁坐標(biāo)依次反算求出橫斷面點(diǎn)相對(duì)中樁的平距,緊接著再依次提取出橫斷面點(diǎn)符號(hào)的Z坐標(biāo)值,即可提取輸出第二行左側(cè)橫斷面點(diǎn)相對(duì)中樁平距和該點(diǎn)的絕對(duì)高程,依次提取輸出左側(cè)所有數(shù)據(jù)。第三行右側(cè)按中樁與橫斷面線端點(diǎn)獲取右側(cè)橫斷面點(diǎn)提取輸出,按左側(cè)提取輸出同樣原理依次提取輸出右側(cè)所有數(shù)據(jù)。重復(fù)以上過程依次獲取道路中線上所有橫斷面線,提取輸出三行一組橫斷面數(shù)據(jù)。
編程環(huán)境采用AutoCAD本身自帶的編輯工具,代碼編寫完成經(jīng)調(diào)試后保存為.LSP文件,在AutoCAD命令行輸入APPLOAD命令加載此文件,命令行輸入函數(shù)命令即可執(zhí)行程序。編輯環(huán)境如圖2所示。
根據(jù)程序原理介紹并結(jié)合實(shí)際的程序設(shè)計(jì),以AutoCAD為開發(fā)平臺(tái),在程序運(yùn)行的過程中只需要選擇中線和保存數(shù)據(jù)路徑兩個(gè)步驟為人工操作外,其他相關(guān)操作都由程序自動(dòng)完成。由此得出基于AutoLISP語言二次開發(fā)實(shí)現(xiàn)自動(dòng)輸出橫斷面數(shù)據(jù)的基本流程如圖3所示。
4 程序?qū)崿F(xiàn)步驟及主要代碼
4.1 程序步驟
具體步驟如下:
1)獲取中線:圖上選取道路中線,轉(zhuǎn)為VLA對(duì)象后可使用VLA擴(kuò)展函數(shù),利用VLA擴(kuò)展函數(shù)獲取中線的最小包圍盒左下角與右下角坐標(biāo)。
2)獲取中樁及里程:利用中線最小包圍盒左下角與右下角自動(dòng)框選出圖中道路中線上所有中樁,使用循環(huán)遍歷獲取每個(gè)中樁至中線起點(diǎn)的距離和中樁三維坐標(biāo)分別存儲(chǔ)于中樁里程表和中樁坐標(biāo)表變量中。由于框選出的中樁順序是不固定的,中樁里程表和中樁坐標(biāo)表變量中的內(nèi)容順序也同樣是不固定的,后續(xù)無法按順序提取輸出數(shù)據(jù),此時(shí)利用VLA擴(kuò)展函數(shù)對(duì)表中的內(nèi)容順序按距離從小到大排序。
3)保存數(shù)據(jù)路徑:通過寫入遞增的方式保存為.txt文件,輸出的橫斷面數(shù)據(jù)將保存于此文件中。
4)獲取橫斷面線:利用中樁坐標(biāo)表變量中的坐標(biāo)自動(dòng)攔選出中線上所有橫斷面線,此時(shí)橫斷面線的順序是與中樁里程、中樁坐標(biāo)順序一致的,循環(huán)遍歷拉選出的每條橫斷線。
5)中樁里程提取輸出:從中樁里程表變量中提取輸出中樁里程數(shù)據(jù),即第一行里程樁號(hào)輸出至TXT文件中。
6)獲取左側(cè)斷面點(diǎn)提取輸出:從中樁坐標(biāo)表變量中提取中樁坐標(biāo),提取橫斷面線左側(cè)起點(diǎn)坐標(biāo),自動(dòng)攔選出左側(cè)橫斷面線上所有橫斷面點(diǎn),獲得左側(cè)橫斷面點(diǎn)集,橫斷面點(diǎn)集依次循環(huán)遍歷,通過橫斷面點(diǎn)坐標(biāo)與中樁坐標(biāo)反算出橫斷面點(diǎn)與中樁平距,提取斷面點(diǎn)的Z值,同行輸出左側(cè)的距離、高程數(shù)據(jù),即第二行左側(cè)數(shù)據(jù)輸出至TXT文件中。
7)獲取右側(cè)斷面點(diǎn)提取輸出:以左側(cè)同樣的方法,依次攔選右側(cè)橫斷面點(diǎn)輸出右側(cè)距離、高程數(shù)據(jù),即第三行右側(cè)數(shù)據(jù)輸出至TXT文件中。
8)一組數(shù)據(jù)提取輸出完成:通過步驟5)、6)、7)完成一條橫斷面線三行一組橫斷面數(shù)據(jù)輸出。
9)全部輸出完成:通過獲取橫斷面線集的循環(huán)遍歷,按順序通過步驟5)、6)、7)輸出每條橫斷面數(shù)據(jù),直至所有橫斷面線提取輸出完成,程序結(jié)束。
4.2 主要代碼
主要代碼內(nèi)容如下:
(setq vla (vlax-ename-gt;vla-objec (car (entsel))));選中線
(VLA-GetboundingBox vla 'minpoint 'maxpoint)
(setq hk (ssget \"c\"(VLAX-Safearray-gt;list minpoint) (VLAX-Safearray-gt;list maxpoint)))
(repeat (sslength hk)
(setq lczh (vlax-curve-getDistAtPoint vla pt))
);里程
(setq hkpp (vl-sort hkpp'(lambda (a b)(lt; (car a) (car b))));排序
(repeat (length hkpp)
(setq ppss (cons lczh ppss))
(setq pdss (cons gzb pdss))
)
(setq ffa (open (getfiled \"\" \"\" \"txt\" 1) \"w\"));輸出
(setq hk (ssget \"f\" pdss));橫斷面線
(repeat (sslength hk)
(write-line (nth hii ppss) ffa);里程輸出
(setq gk (ssget \"f\" (list (list (car hzb) (cadr hzb)) (list (car hzb1) (cadr hzb1)))))
(repeat (sslength gk)
(setq gzb (cdr (assoc 10 (entget (ssname gk gi)))))
(setq gzbxy (list (car gzb) (cadr gzb)))
(setq ggc (caddr gzb))
(setq jls (sqrt (+ (* (- zx (car gzb)) (- zx (car gzb))) (* (- zy (cadr gzb)) (- zy (cadr gzb))))))
(setq pdz (strcat (rtos jls 2 2) \",\" (rtos ggc 2 2)))
(princ pdz ffa);左側(cè)輸出
)
(princ \"\n\" ffa)
……右側(cè)橫斷面數(shù)據(jù)輸出與左側(cè)相同
)
5 程序應(yīng)用
啟動(dòng)AutoCAD軟件,打開圖4的.DWG某工程市政道路勘測(cè)文檔自動(dòng)提取輸出橫斷面數(shù)據(jù),設(shè)計(jì)全長691.896米,中線按20間距左右各60米范圍布設(shè)橫斷面線,勘測(cè)外業(yè)采集、內(nèi)業(yè)編輯工作已全部完成,中樁與斷面點(diǎn)已經(jīng)展繪在圖上。如果沿用手工方式量取每條橫斷面線上斷面點(diǎn)相對(duì)中樁平距,斷面高程再錄入至Excel中,勞動(dòng)強(qiáng)度非常大,工作效率低且易出錯(cuò),而采用AutoLISP編寫的自動(dòng)提取輸出程序的應(yīng)用,命令行輸入APPLOAD加載HDMSC自動(dòng)輸出橫斷面輸出.lsp程序,命令行輸入HDMSC命令“回車”后在圖上選擇道路設(shè)計(jì)中線,彈出保存數(shù)據(jù)對(duì)話框選擇數(shù)據(jù)保存路徑,確定即可按設(shè)計(jì)要求的三行一組橫斷面格式提取輸出至TXT文件中,提取輸出數(shù)據(jù)的整個(gè)過程都無須任何干預(yù),所有橫斷面數(shù)據(jù)輸出時(shí)間只需要1秒鐘。程序結(jié)束后對(duì)提取輸出的橫斷面數(shù)據(jù)進(jìn)行圖中手工量取檢核,說明該程序提取輸出的橫斷面數(shù)據(jù)準(zhǔn)確、可靠,格式均符合要求。
從圖4中提取輸出的橫斷面數(shù)據(jù)部分結(jié)果如圖5所示。
采用AutoLISP語言編寫的自動(dòng)輸出橫斷面數(shù)據(jù)程序已在我單位多項(xiàng)市政道路勘測(cè)工程中得到應(yīng)用驗(yàn)證,自動(dòng)化程度很高,提取輸出的橫斷面數(shù)據(jù)準(zhǔn)確無誤,保證了工期,減輕了工作量,確保了數(shù)據(jù)質(zhì)量,為測(cè)量技術(shù)人員內(nèi)業(yè)提取輸出橫斷面數(shù)據(jù)時(shí)提供了有力保障。
6 結(jié) 論
本文闡述了在市政道路勘測(cè)中基于AutoLISP程序語言二次開發(fā)自動(dòng)輸出三行一組的橫斷面數(shù)據(jù)程序應(yīng)用,在提取橫斷面數(shù)據(jù)工作效率與數(shù)據(jù)質(zhì)量方面有著極大的優(yōu)勢(shì),杜絕了采用傳統(tǒng)手工方法重復(fù)煩瑣且易出錯(cuò)的問題,應(yīng)用證明了ATUOLISP 程序語言在道路勘測(cè)中發(fā)揮著越來越大的作用。該程序還可以根據(jù)實(shí)際應(yīng)用需要,稍微改動(dòng)代碼,便可完全自動(dòng)化提取輸出不同格式、不同數(shù)據(jù)值要求的橫斷面數(shù)據(jù),如CASS格式,一行一組格式等,數(shù)據(jù)值可相對(duì)前點(diǎn)距離,相對(duì)前點(diǎn)高差,相對(duì)中樁高差等,能滿足絕大多數(shù)道路設(shè)計(jì)軟件格式。后期將在實(shí)測(cè)點(diǎn)與橫斷面線存在一定偏差手工處理等方面加予探索,實(shí)現(xiàn)更高的自動(dòng)化。
參考文獻(xiàn):
[1] 潘智勇.基于實(shí)景三維數(shù)據(jù)的道路橫斷面自動(dòng)提取方法研究 [D].阜新:遼寧工程技術(shù)大學(xué),2023.
[2] 常君鋒,孫增輝,王月.破碎地形路線斷面數(shù)據(jù)自動(dòng)提取方法探討 [J].地理空間信息,2021,19(11):38-40+7.
[3] 徐加榮,魏敏.基于AutoCAD的道路橫斷面的提取方法 [J].地礦測(cè)繪,2021,37(1):40-44.
[4] 榮幸.利用DEM在AutoCAD Civil 3D下自動(dòng)提取斷面數(shù)據(jù) [J].地礦測(cè)繪,2013,29(4):31-34.
[5] 馬俊杰,王少文.CASS橫斷面數(shù)據(jù)與飛時(shí)達(dá)等斷面數(shù)據(jù)轉(zhuǎn)換的程序設(shè)計(jì) [J].科學(xué)技術(shù)創(chuàng)新,2024(8):82-86.
[6] 肖怡,徐益飛,趙飛,等.一種基于C~#語言開發(fā)的公路橫斷面轉(zhuǎn)換技術(shù) [J].交通科技,2024(2):43-49.
[7] 唐爭(zhēng)氣;陳正陽.基于Visual LISP全路線橫斷面數(shù)據(jù)自動(dòng)提取 [J].湖南城市學(xué)院學(xué)報(bào):自然科學(xué)版,2013,22(2):28-30.
[8] 湯世海.全站儀測(cè)繪技術(shù)在市政道路測(cè)量中的應(yīng)用 [J].智能城市,2021,7(16):145-146.
[9] 高波,縱瑾,李濤.機(jī)載激光雷達(dá)技術(shù)在高速公路橫斷面測(cè)量中的應(yīng)用 [J].測(cè)繪通報(bào),2023(S1):11-14.
[10] 漆志軍,鄒海峰,于群松,等.基于無人機(jī)RTK輔助定位技術(shù)的研究與應(yīng)用 [J].公路,2020,65(12):201-203.
作者簡(jiǎn)介:彭奕寧(1985.08—),男,壯族,廣西柳州人,測(cè)繪師,研究方向:工程測(cè)量。
收稿日期:2024-06-19