基于ObjectARX的地形图斜坡面转点位置研究
2022-10-06王红林赵海峰
陈 强,王红林,赵海峰
(江苏省地质测绘院,江苏 南京 211102)
0 引 言
基础地理信息数据是政府基础测绘部门生产的权威数据,由于其精度高、要素全、可靠性强,所以被广泛应用于政府决策、经济建设和社会发展的各个领域[1]。为加强盐城市基础测绘工作,提升盐城市基础地理信息数据为社会经济建设服务水平,更新数字盐城地理空间框架建设项目成果,为智慧盐城时空大数据与云平台建设奠定扎实的空间数据基础,盐城市政府启动了大比例尺地形图测绘项目的工作。
盐城市自然资源和规划局规定此项目最终成果格式为EDB格式,所以在项目开展过程中需要把CAD数据转换到“清华山维EPS”软件中。然而,由于“清华山维EPS”软件符号化生成斜坡方向线时需要人工逐个指定斜坡面的转点,造成大量重复工作,降低了生产效率。针对这一问题,本文提出了利用斜坡上坎边线自动为斜坡面赋值转点位置的方法。依托盐城市区大比例尺地形图测绘项目和本单位2020年度科研项目(项目编号:SDCKY202005),通过工程项目验证,该方法效率高、精度好,满足项目要求。
1 主要软件简介
1.1 ObjectARX简介
ObjectARX编程是一种动态链接库(DLL)编程,能够对AutoCAD所有事务进行完整、先进、面向对象的设计与开发。ObjectARX开发的应用程序速度更快、集成度更高、稳定性更强,并且与AutoCAD应用程序共享地址空间,可以直接访问AutoCAD的图形数据库[2-3]。利用ObjectARX对AutoCAD进行二次开发,能更加方便地运用AutoCAD实现图形与数据相互转换、图形批量编辑以及空间数据处理等功能[4]。
1.2 VBS简介
VBS(全称是Microsoft's Visual Basic Scripting Edition)是一种强大的解释型脚本语言,它可以用于包括客户端和服务端的多种环境下。VBScript是一种脚本语言,不是程序设计语言。而脚本语言最主要的优势为其代码是文本,具有良好的平台覆盖,能够在多种环境中运行并且可以方便地嵌入到其他代码中[5]。EPS脚本语言遵循VBScript语言标准,支持用户二次开发,主要实现EPS平台数据整理、数据转换等功能。
2 算法思路及实现
2.1 算法思路
本文算法的主要思路是通过斜坡上坎线起点位置信息和终点位置信息判断出斜坡面转点位置信息。
2.1.1 确保斜坡上坎线起点与斜坡面起点重合
分别获得斜坡上坎线起点(pt1)和斜坡面起点(pt2)的坐标信息XY1和XY2,计算XY1与XY2之间的坐标差值D1。依据差值D1大小分为以下2种情况:
(1)D1小于1 cm,判定斜坡上坎线起点和斜坡面起点重合。
(2)D1大于1 cm,需要获取斜坡上坎线终点(pt3)的坐标信息XY3,判断XY3与XY2之间的坐标差值D2。根据差值D2大小细分为2种情况:①D2小于1 cm,则对斜坡上坎线进行线段的反向操作;②D2大于1 cm,说明作业员没有按照制图要求制图,程序会自动在斜坡面的起点处画一个圆圈,方便作业员对数据进行修改。
2.1.2 记录斜坡面转点位置信息
首先,获得斜坡上坎线终点(Pt4)的坐标信息XY4(上坎线有可能进行了反向操作);然后,判断出斜坡面上所有节点中距离XY4最近的节点位置(N);最后,把N赋值给斜坡面属性表“TERA”的“ZhuanDian”字段。
2.1.3 传递斜坡面转点位置信息
通过编写VBS脚本把斜坡面转点位置信息传递给“清华山维EPS”软件。设置选择集的筛选条件(此脚本主要对实体类型和实体代码进行筛选),把符合筛选条件的实体放入选择集内。对选择集内的斜坡面逐个进行读取,并获得斜坡面属性表“TERA”中字段“ZhuanDian”的值。设置斜坡面上“ZhuanDian”处节点的类型为“转向点”。
2.2 算法实现
本文算法主要通过调用类AcDbPolyline的内部函数以及一些笔者自定义函数来实现。
2.2.1 实现斜坡上坎线起点与斜坡面起点重合
根据类AcDbPolyline的getStartPoint()函数分别获得斜坡上坎线起点坐标值XY1和斜坡面起点坐标值XY2,利用自定义函数XYCZ()获得XY1与XY2之间的距离D1。当D1大于1 cm时,根据getEndPoint()函数获得斜坡上坎线终点坐标值XY3,同样利用自定义函数XYCZ()获得XY1与XY3之间的距离D3。当D3小于1 cm时,利用自定义函数FanX()对斜坡上坎线进行反向操作;反之D3大于1 cm时,则利用自定义函数Yuan()以斜坡面起点坐标值XY2为圆心,0.5 m为半径画一个圆来提示作业员进行修改。主要代码如图1所示。
2.2.2 斜坡面获得转点位置信息
利用getEndPoint()函数获得最终斜坡上坎线终点坐标XY4;利用自定义函数ZJD()确定斜坡面上所有节点中距离坐标XY4最近的节点编号,把该节点编号赋值给字符串型变量N;利用setXData()函数把N传递给斜坡面属性表“TERA”的“ZhuanDian”字段。主要代码如图2所示。
2.2.3 两套软件间传递转点位置信息
通过编写VBS脚本把斜坡面转点位置信息传递给“清华山维EPS”软件,具体做法为:利用SetSelectCondition函数进行条件筛选,然后运用FOR循环语句逐个读取斜坡面,并使用GetSelGeoValue函数获取字段“ZhuanDian”的值,最后利用SetSelGeoPoint函数设置斜坡面上“ZhuanDian”处节点的类型为“转向点”。主要代码如图3所示。
3 应用实例
本文以盐城市区大比例尺地形图测绘项目为实例,进行功能测试。操作步骤为:
(1)利用AutoCAD软件打开盐城市区大比例尺地形图测绘项目成果数据文件。
(2)在AutoCAD命令输入栏中输入命令“XPZD”,程序自动把所有斜坡面转点位置信息记录在各自的属性表中。
(3)程序运行结束后可以通过属性查询命令“AtView”抽查斜坡面转点位置信息是否正确。查询结果示例如图4所示。
4 结 语
本文应用ObjectARX程序执行文件以及VBS脚本文件对盐城市区大比例尺地形图测绘项目2 271幅标准分幅图进行批量处理,共赋值了3285个斜坡面的转点位置信息,总耗时2.6 s。程序运行结束后,进行了人工复核。结果证明,该方法在满足项目要求的同时大幅提高了工作效率,具有较高的应用价值。后期将会对本单位其余区县的地形图测绘项目推广此方法。