基于AutoLISP自动输出道路横断面数据

known 发布于 2025-08-25 阅读(355)

摘 要:在市政道路勘测中,横断面数据提取是常见的内业工作任务之一。对所采集的横断面数据进行分析时,通常需要内业人员通过AutoCAD软件逐个量取数据,存在工作效率低、工作量大、数据易错等问题。文章利用AutoLISP语言在AutoCAD软件中二次开发程序,实现了图中横断面线上的断面点全自动化输出为三行一组横断面数据格式,避免了手工重复量取、录入的烦琐工作。实践证明,该方法有效提高了内业工作效率与数据质量,稍微修改程序还可提取并输出不同的横断面数据格式。

关键词:AutoLISP;道路勘测;横断面数据

中图分类号:TP39 文献标识码:A 文章编号: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 引 言

在市政道路勘测设计阶段,需要进行道路勘测,其主要任务和工作是为设计提供真实可靠的测量数据,测量数据包括道路带状地形数据、断面数据等,道路断面图能直观的体现现状地形起伏情况,其中横断面是道路设计及填挖土方量预算的重要依据,从而需要测量人员进行野外断面测量工作,横断面测量一般采用常规测量实测或建立DEM模型、TIN构建不规则三角网、生成等高线等方法内插生成横断面点,内业则按设计要求的三行一组格式提供道路设计中线桩上的横断面数据。制作横断面数据常规操作是测量技术人员内业使用AutoCAD软件采用传统手工方法通过每条横断面线上的断面点逐个量取至中桩间距并记录至Excel文档的工作,此过程给测量技术人员带来了大量重复烦琐的工作,不仅效率低且数据容易出错等现实问题困扰着测量技术人员[1-4],或者使用常用的CASS软件提取横断面数据,但断面数据格式不符合设计要求,需要使用专用的转换程序[5-6],当内业使用半自动程序输出时,虽然工作效率有所提高,但还是需要手工方式对每条横断面逐个选取,效果不太理想,因此迫切需要通过一种新的提取输出方式来改变这一现状[7]。

基于上述问题与横断面数据格式分析,借助AutoCAD软件二次开发的开放性,AutoLISP程序语言简单易学的特性,本文提出基于AutoLISP语言在AutoCAD软件二次开发实现自动提取输出三行一组横断面数据的方法,可以使得横断面数据提取输出作业实现完全自动化,该方法可有效提高内业工作效率与数据质量。

1 AutoCAD二次开发概述

随着AutoCAD制图软件在工程测量行业的广泛应用,使用开放的体系结构,允许用户可以采用嵌入式的开发语言对其进行功能扩充,满足用户特殊的要求,合理应用AutoCAD二次开发技术,可以根据数据类型、数据成果等特点进行针对性的二次开发。

LISP是表处理程序语言,在人工智能学科领域广泛采用,AutoLISP由AUTODESK公司在LISP语言基础上开发的一种仅能运行于AutoCAD内部的解释型程序语言,用于扩展和定制AutoCAD软件功能,该程序语言简单易懂,非常易于理解和阅读,内含于AutoCAD软件中,不挑剔编辑环境,文本编辑器即可编写,与AutoCAD紧密集成,可直接访问和操作AutoCAD中的对象和功能,AutoLISP语言所有成分都是以函数形式,没有语句概念与其他语法结构,提供了一系列函数调用,统一表达式为表结构,可以直接调用执行AutoCAD命令,AutoLISP的特点在AutoCAD二次开发中成为最主要的基础开发工具之一,通过命令APPLOAD加载后使用,基本结构如下:

(defun c:**();自定义命令函数声明

(vl-load-com);加载ActiveX扩展函数

(setq **);变量声明

(……);实现代码

用户定义的函数,**为启动命令,AutoCAD加载此函数后输入此命令执行

2 数据采集与分析

2.1 数据采集

横断面点是各中桩处垂直于路线方向上的地形起伏点,在市政道路勘测实际工作中目前常用的获得横断面点方式大多使用全站仪[8]、RTK常规野外测量,沿着横断面方向,根据实际地形变化走势实测采集获取断面点三维坐标数据或使用地形碎步点构建不规则三角网、建立DEM模型、生成等高线、实景三维数据、机载激光雷达[9]等方式获取、内插生成横断面线上的断面点三维坐标数据。当采用实测时,野外测量时应保持左、右方向上的断面点大致在一个方向上,目前随着RTK技术发展[10],RTK测量技术表现出了极大的优势,RTK自带横断面测量功能,使得采用常规野外测量横断面点时不会偏离断面方向,且不受横向通视条件限制,在市政道路勘测中使用RTK实测采集横断面点应当作为首选。

如图1中的市政道路中线及横断面线由设计单位提供,横断面线也可通过设计要求左右侧宽度数据使用南方CASS软件自动生成,道路中桩数据由野外测设作业采集获得。当获取中桩、横断面点三维坐标数据后,内业在AutoCAD为平台分别展出中桩及横断面点,展点后的横断面点以中桩为中心分布于横断面线上左、右两侧,采用实测展出的断面点时,偶尔会产生方向偏差,展点后不一定全在横断面线上,偏差点在偏差范围内应处理至横断面线上,便于后续提取输出,在些不再赘述。

2.2 数据分析

根据设计单位提出的三行一组横断面数据格式要求,使用TXT或Excel文件作为存储载体,文件内容中的数据是按道路设计中桩的顺序为每条横断面,其每条横断面格式是第一行为里程桩号,第二行为中线前进方向左侧断面数据,断面点相对中桩平距、绝对高程为一对数据,依次向后由近至远填写,如使用TXT文件需用“,”符号隔开,第三行为右侧断面数据,数据格式和左边一样,此三行为一中桩处完整的横断面数据,其余中桩类似。数据格式如表1所示。

为了提取输出满足于设计要求的三行一组横断面数据格式,本文结合图1为参考介绍使用AutoLISP编程选择中线后获取中桩、横断面线、横断面点三维坐标数据后自动提取输出横断面数据的过程方法。

3 程序原理及流程

通过图1所示的中线、中桩、横断面线、横断面点、横断面数据格式分析得出,道路中线为PLINE多段线,横断面线为LINE直线,中桩为符号块,横断面点为符号块。中线上的中桩符号是生成横断面数据的基础,横断面线及横断面点数据具有规律性,横断面线沿着中线方向布置,且横断面点都在横断面线上,通过对图上道路中线、中桩、横断面线、横断面点实体的获取,按实体特定的规则循环遍历,采用AutoLISP语言完全可实现自动提取输出三行一组横断面数据的功能。程序中只要获取中桩至中线起点的距离,即可提取输出第一行的里程数据,再按中桩与横断面线起点获取左侧所有横断面点,通过横断面点坐标与中桩坐标依次反算求出横断面点相对中桩的平距,紧接着再依次提取出横断面点符号的Z坐标值,即可提取输出第二行左侧横断面点相对中桩平距和该点的绝对高程,依次提取输出左侧所有数据。第三行右侧按中桩与横断面线端点获取右侧横断面点提取输出,按左侧提取输出同样原理依次提取输出右侧所有数据。重复以上过程依次获取道路中线上所有横断面线,提取输出三行一组横断面数据。

编程环境采用AutoCAD本身自带的编辑工具,代码编写完成经调试后保存为.LSP文件,在AutoCAD命令行输入APPLOAD命令加载此文件,命令行输入函数命令即可执行程序。编辑环境如图2所示。

根据程序原理介绍并结合实际的程序设计,以AutoCAD为开发平台,在程序运行的过程中只需要选择中线和保存数据路径两个步骤为人工操作外,其他相关操作都由程序自动完成。由此得出基于AutoLISP语言二次开发实现自动输出横断面数据的基本流程如图3所示。

4 程序实现步骤及主要代码

4.1 程序步骤

具体步骤如下:

1)获取中线:图上选取道路中线,转为VLA对象后可使用VLA扩展函数,利用VLA扩展函数获取中线的最小包围盒左下角与右下角坐标。

2)获取中桩及里程:利用中线最小包围盒左下角与右下角自动框选出图中道路中线上所有中桩,使用循环遍历获取每个中桩至中线起点的距离和中桩三维坐标分别存储于中桩里程表和中桩坐标表变量中。由于框选出的中桩顺序是不固定的,中桩里程表和中桩坐标表变量中的内容顺序也同样是不固定的,后续无法按顺序提取输出数据,此时利用VLA扩展函数对表中的内容顺序按距离从小到大排序。

3)保存数据路径:通过写入递增的方式保存为.txt文件,输出的横断面数据将保存于此文件中。

4)获取横断面线:利用中桩坐标表变量中的坐标自动拦选出中线上所有横断面线,此时横断面线的顺序是与中桩里程、中桩坐标顺序一致的,循环遍历拉选出的每条横断线。

5)中桩里程提取输出:从中桩里程表变量中提取输出中桩里程数据,即第一行里程桩号输出至TXT文件中。

6)获取左侧断面点提取输出:从中桩坐标表变量中提取中桩坐标,提取横断面线左侧起点坐标,自动拦选出左侧横断面线上所有横断面点,获得左侧横断面点集,横断面点集依次循环遍历,通过横断面点坐标与中桩坐标反算出横断面点与中桩平距,提取断面点的Z值,同行输出左侧的距离、高程数据,即第二行左侧数据输出至TXT文件中。

7)获取右侧断面点提取输出:以左侧同样的方法,依次拦选右侧横断面点输出右侧距离、高程数据,即第三行右侧数据输出至TXT文件中。

8)一组数据提取输出完成:通过步骤5)、6)、7)完成一条横断面线三行一组横断面数据输出。

9)全部输出完成:通过获取横断面线集的循环遍历,按顺序通过步骤5)、6)、7)输出每条横断面数据,直至所有横断面线提取输出完成,程序结束。

4.2 主要代码

主要代码内容如下:

(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);左侧输出

(princ \"\n\" ffa)

……右侧横断面数据输出与左侧相同

5 程序应用

启动AutoCAD软件,打开图4的.DWG某工程市政道路勘测文档自动提取输出横断面数据,设计全长691.896米,中线按20间距左右各60米范围布设横断面线,勘测外业采集、内业编辑工作已全部完成,中桩与断面点已经展绘在图上。如果沿用手工方式量取每条横断面线上断面点相对中桩平距,断面高程再录入至Excel中,劳动强度非常大,工作效率低且易出错,而采用AutoLISP编写的自动提取输出程序的应用,命令行输入APPLOAD加载HDMSC自动输出横断面输出.lsp程序,命令行输入HDMSC命令“回车”后在图上选择道路设计中线,弹出保存数据对话框选择数据保存路径,确定即可按设计要求的三行一组横断面格式提取输出至TXT文件中,提取输出数据的整个过程都无须任何干预,所有横断面数据输出时间只需要1秒钟。程序结束后对提取输出的横断面数据进行图中手工量取检核,说明该程序提取输出的横断面数据准确、可靠,格式均符合要求。

从图4中提取输出的横断面数据部分结果如图5所示。

采用AutoLISP语言编写的自动输出横断面数据程序已在我单位多项市政道路勘测工程中得到应用验证,自动化程度很高,提取输出的横断面数据准确无误,保证了工期,减轻了工作量,确保了数据质量,为测量技术人员内业提取输出横断面数据时提供了有力保障。

6 结 论

本文阐述了在市政道路勘测中基于AutoLISP程序语言二次开发自动输出三行一组的横断面数据程序应用,在提取横断面数据工作效率与数据质量方面有着极大的优势,杜绝了采用传统手工方法重复烦琐且易出错的问题,应用证明了ATUOLISP 程序语言在道路勘测中发挥着越来越大的作用。该程序还可以根据实际应用需要,稍微改动代码,便可完全自动化提取输出不同格式、不同数据值要求的横断面数据,如CASS格式,一行一组格式等,数据值可相对前点距离,相对前点高差,相对中桩高差等,能满足绝大多数道路设计软件格式。后期将在实测点与横断面线存在一定偏差手工处理等方面加予探索,实现更高的自动化。

参考文献:

[1] 潘智勇.基于实景三维数据的道路横断面自动提取方法研究 [D].阜新:辽宁工程技术大学,2023.

[2] 常君锋,孙增辉,王月.破碎地形路线断面数据自动提取方法探讨 [J].地理空间信息,2021,19(11):38-40+7.

[3] 徐加荣,魏敏.基于AutoCAD的道路横断面的提取方法 [J].地矿测绘,2021,37(1):40-44.

[4] 荣幸.利用DEM在AutoCAD Civil 3D下自动提取断面数据 [J].地矿测绘,2013,29(4):31-34.

[5] 马俊杰,王少文.CASS横断面数据与飞时达等断面数据转换的程序设计 [J].科学技术创新,2024(8):82-86.

[6] 肖怡,徐益飞,赵飞,等.一种基于C~#语言开发的公路横断面转换技术 [J].交通科技,2024(2):43-49.

[7] 唐争气;陈正阳.基于Visual LISP全路线横断面数据自动提取 [J].湖南城市学院学报:自然科学版,2013,22(2):28-30.

[8] 汤世海.全站仪测绘技术在市政道路测量中的应用 [J].智能城市,2021,7(16):145-146.

[9] 高波,纵瑾,李涛.机载激光雷达技术在高速公路横断面测量中的应用 [J].测绘通报,2023(S1):11-14.

[10] 漆志军,邹海峰,于群松,等.基于无人机RTK辅助定位技术的研究与应用 [J].公路,2020,65(12):201-203.

作者简介:彭奕宁(1985.08—),男,壮族,广西柳州人,测绘师,研究方向:工程测量。

收稿日期:2024-06-19

标签:  横断面 

免责声明

本文来自网络,不代表本站立场。如有不愿意被转载的情况,请联系我们。

iidomino cuppor