基于AutoCAD的道路横断面的提取方法*
2021-04-21徐加荣
徐加荣,魏 敏
(江苏省地质测绘院,江苏 南京 211102)
0 引言
道路断面测量是道路建设过程中的一项重要工作,断面数据是工程设计、土方计算、边桩放样、桥涵等构筑物设计的基础。道路横断面是垂直于道路方向的地面断面线,能描述道路中线两侧一定范围内的地面起伏变化情况。道路横断面测量一般情况下都是在道路中线两侧根据地形变化情况实测或从DEM模型上提取一些离散点三维点,从而模拟地形特征[1-2]。在测绘行业中,一般都是使用AutoCAD作为图形数据的处理平台。AutoCAD在图形绘制方面具有很大的优势,但AutoCAD本身并没有提供提取道路横断面的功能。AutoCAD具有十分丰富的二次开发接口,能够通过二次开发实现道路横断面数据的自动提取。为此,本文提出了一种利用VBA编程实现道路横断面自动生成的方法。
1 横断面数据格式分析
道路横断面文件的格式种类较多,专用的道路设计软件都有其特殊的数据格式。本文介绍的格式是由江苏省交通规划设计院股份有限公司(中设设计集团股份有限公司)提出的横断面格式。此横断面数据以微软的Excel文件作为存储载体,工作表的第一行为标题行,用于标识每列的用途。有效数据从工作表的第二行开始,每一个断面占3行,详细格式要求如下:
第一行为中桩信息,从A列到E列分别填写:线位名、中桩高程、中桩位置描述(即中桩的所处位置的地形特征,如沟边、路边、田中等)、位置、中桩桩号。
第二行为左侧断面数据,从D列开始填写,D列填写“左”,用于标识此行数据为左侧中桩,后面填写断面点距中桩的距离与高程值,两个值为一组,依次向后由近及远填写。
第三列为右侧断面数据,从D列开始填写,D列填写“右”,用于标识此行数据为右侧中桩,后面填写断面点距中桩的距离与高程值,两个值为一级,依次向后由近及远填写。
表1 断面数据格式示例
2 模块功能分析
根据横断面数据格式的要求及AutoCAD软件的特点,设计了横断面提取工具的总体框架,其主要由4个模块组成:参数配置、中桩导入、横断面线绘制、横断面表格导出。
2.1 参数配置
参数主要由中桩导入配置、横断面配置、高程点配置、导出配置等组成,如图1所示。
1) 中桩导入配置:设置中桩表的线路名称、每列的用途、有效数据行;
2) 横断面配置:设置横断面线的图层、搜索缓冲;
3) 高程点配置:设置高程的过滤表达式及取值表达式;
4) 导出配置:设置导出的数学精度。
图1 参数配置模块
2.2 中桩导入
中桩坐标是在道路中线放样时在外业实地测得的数据,包括桩号、平面坐标、高程及地形说明等,保存于Excel文件中。中桩坐标是生成横断面数据的基础,每个横断面都以中桩为中心进行搜索获得。读取中桩坐标使用开源组件NPOI。NPOI是一个读写Excel、Word等微软OLE2组件文档的项目,是Apache POI 项目在.NET 中的实现,可以在不依赖于Microsoft Excel的情况下实现对Excel文件的读写。使用此组件读取中桩坐标的关键步骤如下:
1)实例化工作簿
FileStream=File.OpenRead(FilePath)
Book=New HSSFWorkbook(FileStream) 或 Book=New XSSFWorkbook(FileStream)
2)获取工作表
Sheet=Book.GetSheetAt(0)
3) 获取某一行
Row=Sheet.GetRow(RowIndex)
4) 获取单元格数据
Value=Row.GetCell(CellIndex).ToString()
2.3 横断面线绘制
图2 横断面线绘制示意图
2.4 横断面表格导出
在提取横断面线时,从线路的起点开始,依次选择横断面线,详细步骤如下:
1)以中桩值从小到大的顺序遍历道路中桩;
2)以中桩为中心选择横断面线;
3)分别提取左、右高程点;
4)重复步骤二。
在提取左、右高程点时,可以使用式(1)来判断:如果A值大于0表示点在中心线的左侧,A值小于0表示点在中心线的右侧,A值等于0则表示点在中心线上[3]。
A=(X1-X)* (Y2-Y) - (Y1-Y) *
(X2-X)
我嘴里说着:“你们拿一把菜刀把我劈成两半吧”,先替母亲把不用的餐具放了上去,又帮着父亲移动书柜。移完书柜,我就属于父亲了。他拉住我,要我把他整理好的书籍一排一排地放到书架上。我的母亲在厨房里叫我了,要我把刚才放上去的那一箱不用的餐具再搬下来,她发现有一把每天都要用的勺子找不着了,她说会不会放在那一箱不用的餐具里面,而这时候父亲又把一叠书籍递给了我,我说:“你们拿一把菜刀把我劈成两半吧。”
(1)
式中:A表示方向判别值;X1、Y1表示当前中桩点的平面坐标;X2、Y2表示下一个中桩点的平面坐标;X、Y表示某一高程点的平面坐标。
3 程序实现
道路横断面提取工具的开发基于ObjectARX.Net框架,IDE选择Visual Studio 2013,使用VisualBasic.Net作为编码语言实现以上的全部功能。ObjectARX.Net是AutoCAD.Net API提供的托管程序集,方便开发人员使用.Net Framework支持的任意一门语言进行开发。此工具的运行流程,如图3所示。
图3 道路横断面提取程序运行流程
本文基于AutoCAD2010来实现道路横断面提取工具的各个功能,主要有以下几个步骤:
3.1 创建编程环境
在Visual Studio 2013中创建一个项目,语言选择Visual Basic,类型选择类库。项目创建完毕后,引入AutoCAD安装目录中的acdbmgd.dll与acmgd.dll,并将“复制到本地”属性设为False、“目标CPU”属性设为AnyCPU。
3.2 定制AutoCAD命令
在ObjectARX.Net开发环境中,需要将类中的方法添加Autodesk.AutoCAD.Runtime命名空间下的CommandMethodAttribute标识,程序加载后,就可以在AutoCAD命令行中输入自定义的命令对方法进行调用[4-5],关键代码如下:
Public Sub Road_DLHDM()
Dim KeyValue As String=EditorKit.GetKeyWord("S:设置","I:导入中桩","D:绘制横断面", "E:导出横断面文件")
Select Case KeyValue
Case "S"
ConfigSet()'设置
Case "I"
ImportData()'导入中桩
Case "D"
DrawSectionLine()'绘制横断面线
Case "E"
ExportFile()'导出横断面文件
End Select
End Sub
3.3 加载程序文件
代码经调试、编译后,使用AutoCAD提供的netload命令,选择编译好的DLL文件,即可完成加载任务。加载完毕后,在命令行中输入自定义的道路横断面命令DLHDM后再输入相应的选项进行道路横断面数据处理的各种操作。
4 应用实例
在某条公路前期勘察过程中,作业人员首先根据设计单位提供的道路中线直曲表进行实地放样,确定中桩后同时测量了此中桩对应的横断面高程点。在测量道路中桩时还记录了中桩的地形特征。外业测量结束后,将测量的碎部点以高程点的方式展到AutoCAD中并在Excel中整理道路中桩坐标。然后使用DLHDM命令进行横断面数据处理,主要步骤如下:
1)进行相关参数设置,主要设置横断面线的图层、高程点的特征及搜索缓冲距离;
2)导入道路中桩坐标;
3)开始自动绘制横断面线,部分受到地形影响不规则的横断面可以通过手工干预进行辅助绘制;
4)执行提取横断面数据前的各项检查;
5)检查无误后导出道路横断面文件。
绘制好的横断面线及导出的横断面文件,如图4、图5所示。
图4 道路横断面图(部分)
图5 道路横断面文件(部分)
使用该程序提取横断面文件,主要的工作时间用于整理道路中桩坐标文件,中桩文件整理完后,就可以使用此工具快速生成符合甲方要求的横断面文件。经测试,如果采用手工方式生成道路横断面文件,处理完一条道路(约80个断面)需要花费约2天的时间,而使用道路断面程序自动提取,全程仅需要半个小时即可完成,而且不容易出现错误,降低了质量隐患。
5 结束语
本文提出的通过绘制道路横断面线的方式来自动生成横断面文件能够有效提升数据质量并提高作业效率,从而减轻测量人员的数据处理工作量,保证勘察设计工期。该方法对于其它类型的AutoCAD应用也有一定的借鉴意义。