基于AutoCAD的高曲矛盾检查工具的设计与实现
2022-10-06黄北生盛盈盈
黄北生,盛盈盈
(江苏省地质测绘院,江苏 南京 211102)
0 引 言
AutoCAD是由美国Autodesk公司开发的一种通用计算机辅助设计软件,功能强大且可定制性高,深受广大测绘技术人员的喜爱,在测绘行业中有着广泛的应用。AutoCAD默认的DWG数据格式已成为存储地形图成果数据的标准。AutoCAD通用性强,没有针对测绘行业进行专业定制,致使众多测绘单位根据内部生产流程与数据组织方式开发了基于AutoCAD的专用绘图软件,以提高测绘生产的效率与质量。
高程点和等高线是地形图数据的重要组成部分,保证高程点与等高线之间关系的正确性是地形图质量控制的一项重要工作。正常情况下,如果一个高程点位于两根等高线之间,那么此高程点的高程值应介于两根等高线的高程值之间。如果某个高程点的高程值不满足上述条件,则将高程点与等高线产生的矛盾称为高曲矛盾。在没有高曲矛盾检查软件时,人工目视检查是检查高曲矛盾的主要方法,这种方法检查效率低,而且容易导致漏查、错查,因此需要设计一种通过软件实现高曲矛盾自动检查的工具,以提高检查准确率及地形图生产的效率。
文献资料检索结果表明,高曲矛盾自动化检查虽受到了一定关注,但相关研究尚处于起步阶段,胡现辉等[1]编制的高曲矛盾检查工具能够提高生产效率与产品质量,但难以判断地形图边缘区域及复杂区域的高曲矛盾问题。武安状等[2]基于放射线法开发了检查高曲矛盾的工具,能够极大减少检查工作量,但需联动ObjectARX、AutoCAD以及Visual Studio进行开发,不便于二次实现。段文化等[3]基于FME平台分别实现了构TIN法与放射线法的高曲矛盾检查,且对比发现两种检查方法具有较高的正确率,但算法程序需按经验预设合理参数,参数不合理会致使检查结果出现差异。综上,为降低开发难度以及提高高曲矛盾工具的适用性,本文基于构建TIN法,通过成熟的ArcEngine软件提供的二次开发接口编制高曲矛盾的自动化检查程序,在降低开发难度的同时,能极大提高质检工作者的检查效率。
1 构建TIN检查高曲矛盾原理
在AutoCAD中,高程点一般使用属性块(Attribute Block)表示,等高线一般使用多段线(Polyline)表示。高曲矛盾检查是默认在等高线高程值无错的前提下进行的,若查询存在高曲矛盾现象,则统一认为是高程点的高程值存在问题。进行高曲矛盾检查时,首先从AutoCAD中将高程点及等高线分别提取到相应的高程数据文件中,然后调用ArcEngine提供的API读取高程数据文件并对提取的高程点及等高线进行构TIN处理。构建TIN后,根据原高程点的平面坐标,查询此位置构TIN后的高程值,再将原高程值与TIN中的高程值进行对比,以确定原高程值是否合理[3]。
确定原高程值是否合理,首先需要计算此点所在的高程区位值:
(1)
式中,Index为高程值所在的区位值;E′为通过位置与TIN计算出的高程值,单位为m;C为当前地形图设置的基本等高距,单位为m;Floor为返回小于或等于指定数值的最大整数。
计算高程区位值后,再进行高程区间计算:
(2)
式中,Emin、Emax分别表示高程区间的最小值与最大值,单位为m。
得到某点的高程区间值后,如果点的实际高程值位于最小值与最大值之间,则认为此高程值是合理的,即没有高曲矛盾,反之则存在高曲矛盾。
2 高曲矛盾检查工具设计思路
高曲矛盾检查的基本流程是将提取的高程信息进行构TIN处理,然后进行高程值比较,以此得出是否存在高曲矛盾。高曲矛盾检查工具主要功能为提取高程信息、构TIN检查、日志查看。
2.1 提取高程信息
高程信息由3个数据组成,分别为高程点的点位平面坐标和高程值、等高线的节点平面坐标和高程值、检查范围的节点平面坐标。其中,检查范围为可选数据,若没有设置检查范围,可通过高程点与等高线的平面范围进行凸包分析,从而得到检查范围。为提高检查的可靠性,应提前绘制检查范围线。
高程点在AutoCAD中是以属性块的方式表示,即带属性的块参照(Block Reference),提取高程点的高程信息时,首先通过Block Reference. Position属性获取点的平面坐标,然后从Block Reference. Attribute Collection属性中读取高程值。遍历当前图中参与检查的高程点,将读取到的每个高程信息以文件的方式进行保存[4]。
等高线在AutoCAD中是以多段线的方式表示,高程值保存于标高(Elevation)中。提取等高线的高程信息时,需通过Polyline.GetPoint2dat方法依次读取每个节点的平面坐标,然后再从Polyline.Elevation属性中读取高程值。遍历当前图中参与检查的等高线,将读取到的每个高程信息以文件的方式进行保存。
检查范围在AutoCAD中也是以多段的方式表示,但不保存高程值。读取检查范围的方式与读取等高线的方式相同,限于篇幅,不再赘述。
2.2 构TIN检查
高程信息提取后,可以调用ArcEngine提供的相关功能进行构TIN检查。在ArcEngine中,构建TIN文件使用的核心方法为三维分析工具集中的CreateTin_3d方法[5],运行此方法需提供以下几个参数:输出TIN的路径、空间参考、参与构TIN的要素及构TIN算法。本文中使用的构TIN算法为约束型Delaunay方法。参与TIN的参数准备完成后,使用地理处理工具GeoProcessor执行此方法即可,调用方式如图1所示[6]。
构TIN完成后,需对TIN数据进行加载检查,进行加载前应创建一个TIN对象,再使用ITinAdvanced接口的Init方法加载TIN数据,实现方式如图2所示[7]。
完成上述部分便可对每个高程点进行检查。计算高程点高程时,使用ITinSurface接口的GetElevation方法。如果检查出某个高程点存在高曲矛盾时,将此高程点的平面坐标、实际高程值、高程值区间写入日志文件,主要代码如图3所示。
2.3 日志查看
高程点与等高线存在高曲矛盾时,检查日志中已经记录了此高程点的平面坐标及高程信息。要想查看检查结果是否合理并对高程点的高程值进行修正,必须通过点的平面坐标进行定位。在AutoCAD中将某个指定位置平移到可见视图范围内这一操作,实质是设置新的视图。进行视图更新时,首先应创建一个ViewTableRecord并设置中心点(CenterPoint),该点为日志中读取的值,然后使用AutoCAD中Editor类的SetCurrentView方法设置当前视图,主要代码如图4所示。
3 功能实现
高曲矛盾检查工具基于AutoCAD2010为开发框架,在Visual Studio 2013开发环境中,使用VisualBasic.NET作为开发语言,实现了以上全部功能[8]。
3.1 开发环境搭建
在Visual Studio 2013中创建一个新的类库项目,依次引用acmgd.dll、acdbmgd.dll及ArcEngine的相关DLL后,修改acmgd.dll、acdbmgd.dll这两个文件的本地的属性为“否”。然后添加新的类文件并创建AutoCAD命令,主要内容如图5所示。
CommandMethodAttribute类是AutoCAD二次开发环境提供的将方法暴露为AutoCAD命令的标识。
3.2 各项模块功能实现
进行高曲矛盾检查时,要经过高程信息提取、构TIN及检查、日志查看这3个步骤。每个步骤作为一个独立的模块进行开发,最后通过命令接口函数ElevationCheck统一调用。
高程信息提取模块的主要功能就是将参与检查的高程点与等高线提取出来,供ArcEngine构TIN及检查。为保证后续模块能够正常读取提取出的高程信息,需要对高程信息定制其数据结构,结构的主要内容如图6所示。
构TIN及检查模块是基于ArcEngine进行开发的,由于ArcEngine只有32位模式,在进行此模块开发时,如果AutoCAD为32位,则直接可以引用相关DLL进行开发,如果AutoCAD为64位时,则需借助于进程间通讯的相关技术。检查完成后,需将检查日志输出。为方便日志查看,模块读取日志信息及XML序列化保存,需定义一个日志数据结构,主要内容如图7所示。
日志查看模块的主要功能就是读取日志信息并进行定位,以便于用户进行交互修改。读取日志信息可以通过XML反序列化方式获取,然后再通过AutoCAD中的Editor类设置当前视图方法进行图形定位。
3.3 代码编译与加载
各模块的代码编写完成后,即可对整个项目进行编译。项目编译后,会产生一个新的DLL文件,使用AutoCAD提供的netload命令可将此DLL文件加载到AutoCAD中,运行ElevationCheck ,选择参与检查的对象后进行高曲矛盾检查,检查日志会自动加载到当前图面中。
4 应用实例
图8为某地形图测量项目内业绘图成果,测区范围内山地与丘陵较多,等高线与高程点较为密集,通过人工目视检查高曲矛盾时,效率较低,一幅地形图需近一天时间才可检查完毕,且易出现错查、漏查的现象,此类项目的高曲矛盾检查给质检带来很大困扰。
为解决此问题,笔者利用本文所述算法基于Visual Studio软件开发了高曲矛盾检查工具。将图8所示的地形图利用自编高曲矛盾软件进行检查,通过ElevationCheck命令进行高曲矛盾检查时,约3 min的时间将检查结果返回,检查结果为图9所示的日志查看工具。通过日志查看工具可以快速对有问题的高程点进行定位,此工具极大节约了质量检查人员的检查时间,同时也提升了检查的质量。
5 结 语
本文通过对高曲矛盾检查原理的分析,介绍了高曲矛盾检查过程中每个步骤的实现方法,并以AutoCAD为开发框架,定制专用的高曲矛盾工具,降低了质量检查人员工作强度,同时也提升了产品的质量。在对地形数据进行构TIN处理时,直接调用ArcEngine中二次开发的开发接口,不但降低了高曲矛盾开发的难度,同时加快了整个工具开发的进程。文中关于AutoCAD开发的设计思路及实现方法对开发其它基于AutoCAD的应用也有一定的借鉴意义。