原标题:利用AutoCAD二次开发实现地形图高程点与等高线错误自动查找

水土保持之点滴,关注后可查阅所有文章

来源:《测绘通报》2017年第5期

作者:刘洪、黄军胜

摘要:论述了数字地形图中产生高程点与等高线错误的可能原因,分析了高程点和等高线在地形图中的空间位置关系及作为判断条件的数学关系,论述了解决问题的办法和判断规则,展示了通过编制计算机程序实现找出其错误的核心代码。此研究对于减轻质检人员在检查数字地形图的高程点与等高线错误时的劳动强度和提高工作效率很有意义。

关键词:数字地形图;等高线;高程点;点线不符;C#

因为科学技术的进步,在现阶段地形图的生产能力有了很大的提高,但由于人工智能仍不够发达且很多环节仍需要人工干预,导致生产出的地形图仍存在着高程点与等高线的错误。 对于质检人员而言,如果仅凭借着眼睛,要找出这些错误以提高地形图的质量水平是非常困难的,劳动强度大不说,而且效率低下、极易出现遗漏。因此,找到一种高效率的办法解决这个问题就显得很有必要,本文正是据此分析产生错误的原因,找到解决的办法,再利用C#+ObjectARX 对AutoCAD 二次开发编程实现查找数字地形图中高程点与等高线的错误。

1、错误原因分析

1.1 高程点错误

目前大比例尺数字地形图主要有3 种生产方式:一是老图矢量数字化,在识别老图中的高程注记点时,有些不能正确识别,需要人工修改,容易输入错误;二是利用航片经畸变纠正等工序生成正射影像得到数字线划图并在立体模型中取得高程属性值,取得高程值时读取错误,与实际绘制的等高线形成矛盾;三是全野外数据采集内业编辑形成数字地形图,其注记点的高程直接由数据文件读取生成,这种直接注记高程点的方式不易出现错误,但作业员在调整自动绘制的等高线时,可能为了圆滑美观而人为调整等高线上的节点位置,从而导致高程注记点的高程数值与等高线形成矛盾。

由以上方式生产得到的数字地形图,都有可能因图面高程注记点的数量达不到规范要求而人工加注高程点,而人工加点由于作业人员的疏忽,判断等高线错误导致加注高程点错误,这是最易产生错误的原因。

有时,作业员在发现高程注记点的高程数值与等高线相互矛盾时,为图方便,仅将其注记数值修改成正确数值而没有对高程点特性的坐标Z 值进行相应修改,从而导致错误。

1.2 等高线错误

在调整不合理等高线时,作业员需删除计算机绘制的部分不合理等高线,另行绘制补充,由于粗心,忘记修改等高线的高程属性值,使其值为零或其他错误值,导致新绘制的等高线与已绘制好的等高线及高程点相互矛盾,或者又由于图面元素太密集而在浏览时误删了某一条正确的等高线。

2、解决办法探究

2.1 错误归类

根据以上原因分析,可以看出数字地形图中高程点与等高线产生错误的原因可以归为如下4 类:即点的高程特性坐标Z 值与点的高程注记数值不符;等高线正确,但高程点不正确;高程点正确,但等高线不正确;等高线与高程点皆不正确。

2.2 解决办法

2.2.1 点的高程特性坐标Z 值与点的高程注记值不符

对数字地形图的∗.dwg 格式文件进行遍历ꎬ在高程点图层中找到全部高程点,读取其高程特性坐标Z 值和高程注记数值(即高程点特性中的height属性值),并将两者比较,若两不相等,即为作业员修改过高程点的高程注记数值,用圆圈将其标示出来。

如图1 所示,高程点的高程特性坐标Z 值原为“61.355 0”,点的高程注记数值原为“61.36”,被作业员人为修改为“59.36”,导致两者不符,这在入库时或许会引起新的错误。

图1 高程点自身属性数据矛盾

2.2.2 等高线正确,但高程点不正确

如果等高线与高程点都是正确的,则高程点的高程注记值与其最近的一根等高线的高程值之差应该在一个等高距之内。

在AutoCAD 中,每一个图元都对应着一个唯一的ID,可以从高程点开始,人为构造一条射线,与等高线相交ꎬ提取这些交点和与之对应的等高线ID,然后按高程点与这些交点的远近距离进行排序,由此可按顺序逐条找到高程点周边的不同等高线。图2 所示为构造线与等高线相交的可能顺序。

图2 排序前等高线的顺序

相交后,即可获得各交点的坐标,据此可计算出各相交点与此高程点的距离,根据其距离值的大小,再次按近远顺序排列,图3 所示,为构造线与各等高线相交点距离的近远顺序。

图3 排序后等高线的顺序

经过这样排序之后,便可按顺序找到相应的等高线,读取其高程值。

假设高程点的高程值为HA,若|HA-H1|>等高距,则此高程点错误,以圆圈标记之,如图4 所示(横线为构造线,处理后程序自动删去)。

图4 高程点错误示例图1

若|HA-H1|0 且H1-H2<0 或HA-H1<0 且H1-H2>0,则此高程点错误,如图5所示。

图5 高程点错误示例图2

若|HA-H1|

如果,此高程点错误。

如果,否则此高程点错误。

如图6 所示,HA点所在位置较为直观地反映了|HA-H1|

图6 高程点错误示例图3

2.2.3 高程点正确ꎬ但等高线不正确

(1) 等高线高程值为零这种情况存在于沿海一带及海拔位于零左右的地方,在其他地方出现便是错误无疑, 作业员在调整修改等高线时,对部分不合理的等高线进行了删除操作,然后由手工绘制补充,而未对其赋予正确的高程值可能会出现零或输入了其他错误值, 这样的等高线,在图面上并不能看出不妥之处,但在建立立体模型生成DEM 等产品的过程中,必定会出现与实地不符的形状,从而导致错误,严重影响产品质量。

0 米高程线在其线头位置以圆圈标记,并注明此线高程为0,

(2) 假设A 点沿构造线方向相交有3 条以上多条等高线且等高线的高程值均不相等,

如果|H3-H1|=等高距且|H2-H1|≠等高距,则临近高程点A 的第1 条等高线错误,在其交点位置以圆圈标记。

如果|H3-H1|= 2 倍等高距或者零且|H2-H1|≠等高距,则临近高程点A 的第2 条等高线错误,在其交点位置以圆圈标记。

如果|H2-H1|=等高距且|H3-H2|≠等高距,则临近高程点A 的第3 条等高线错误,在其交点位置以圆圈标记。

以此类推,可以判断出第4 条、第5 条甚至更多的等高线, 不过,此地形图如果是按规范展绘高程点,其数量及位置涵盖到了每个小区域,则不必每个点都判断多条等高线,根据经验,一般判断3 条就够了。

图7 较为直观地反映了|HA-H1|等高距,则此处等高线2 必定错误这一规则(此处为等高线2 错误)。

图7 等高线错误示例图1

图8 较为直观地反映了|H3-H1|= 2 倍等高距或零且|H2-H1|≠等高距,则临近高程点A 的第2 条等高线错误这一规则(此处为第2 条等高线错误)。

图8 等高线错误示例图2

2.2.4 等高线与高程点皆不正确

这种情况比较少,但如果采用以上规则进行判断,则可以直接得出结论,无论是高程点还是等高线都将被圆圈标记,以示错误,需要人工干预,理清缘由。

2.2.5 特殊情况

(1) 若高程点A 已在图边,则向图边构造线是无法判断此高程点是否正确的,这种情况下,需要向另一方向构造线来与等高线相交,再用上述规则进行判断。

如图9 所示,若右侧为图框,A 点位于图边,向右的构造线已没有等高线与其相交,这时,则需要向另一方向构造线段或射线来与等高线相交,如图10所示。

图9 构造线与等高线相交示例图1

图10 构造线与等高线相交示例图2

(2) 若高程点A 一侧只有一根等高线,则仅能判断|HA-H1|是否小于等高距,却不能确定高程点或等高线是否正确,这时ꎬ也需要根据上一条规则向另一方向构造线来与等高线相交,再进行判断。

(3) 若高程点A 一侧只有两根等高线,如果两根等高线高程不同,则可用上述规则判断点是否错误或等高线是否错误,但如果两根等高线高程相同,则不能确定高程点或等高线是否正确,这时,也需要向另一方向构造线来与等高线相交,再进行判断。

(4) 若高程点A 一侧相交的第一条线为田埂线或陡坎(坡、崖)线,由于田的另一侧地形与此高程点无太大联系且同一条坎(坡、崖)的各点高度绝大部分都不相同,因此无法判断,需要向另一方向构造线来与等高线相交,再进行判断, 因本程序的主要功能是查找高程点与相临等高线的错误,如若点的各个方向的第一条交线都为田埂线或陡坎(坡、崖)线(如高程点在梯田中间),则不再对此点判断。

3、编程实现

3.1 编程环境配置

操作系统: Microsoft Windows 10 中文旗舰版64位操作系统,硬件开发环境:联想笔记本昭阳E49A。

软件开发环境:Microsoft Visual Studio.NET 2008+ObjectARX 2010。

软件运行环境:AutoCAD 2010。

3.2 编程核心算法

选择出数字地形图中的田埂线和陡坎(坡、崖)线及等高线,构建选择集,遍历数字地形图中的所有高程点,将高程点逐个向一侧构造线与临近的田埂线或陡坎(坡、崖)线或等高线相交,剔除田埂线和陡坎(坡、崖)线,比较高程点注记与Z 值,高程点注记与邻近等高线的高程值,以及临近几条等高线间的高程值,然后把错误的高程点在高程点位置用圆圈标记出来,把错误的等高线在等高线的交点处用另一半径圆圈标记出来, 部分核心代码如下:

4、验证效果

图11 所示为查找程序运行的开始界面,此时可在对话框中输入当前数字地形图的等高距,其默认值为1 m,使用时可根据实际情况填写。

图11 程序运行开始界面

图12 所示为查找程序运行的结束界面ꎬ点击确定后即显示检查结果。

图12 程序运行结束确认界面

图13 所示为程序运行后结果显示。

图13 错误查找结果

5、结 语

经过以上论述过程可以看出,本文的研究结果是正确的,可以利用前述判断规则编制的程序来完成数字地形图中高程点与等高线的错误自动查找,据此改正即可提高数字地形图的质量,可以明显减轻质检人员在检查数字地形图的高程点与等高线错误时的劳动强度,提高工作效率,解决了质检人员人工查找点线矛盾的难题。

责任编辑:

eps高程点和高程注记不符_利用AutoCAD二次开发实现地形图高程点与等高线错误自动查找...相关推荐

  1. 导出txt文件宏_利用solidwords二次开发导出三维曲面方阵点坐标方法

    本文介绍了利用solidwords二次开发(API Application Program Interface,应用程序接口)实现三维曲面基于基准平面上的矩阵点投影到三维曲面上点的坐标值导出方法:利用 ...

  2. .net 统计图 导出_利用solidwords二次开发导出三维曲面方阵点坐标方法

    本文介绍了利用solidwords二次开发(API Application Program Interface,应用程序接口)实现三维曲面基于基准平面上的矩阵点投影到三维曲面上点的坐标值导出方法:利用 ...

  3. 基于FME实现dwg等高线、高程点、计曲线注记的高程值批量修改研究,等高线批量修改高程,高程点批量修改高程,计曲线注记批量修改高程

    目录 一.实现效果 1.修改后的数据截图 2.原始数据截图 二.实现过程 1.高程调整值参数输入 2.高程点的高程调整 3.等高线的高程调整 4.计曲线注记的高程调整 5.输出设置 6.FME模板的整 ...

  4. 利用geotools生成点线面和注记的sld样式(二)

    接上一部分,我们可以用Filter来区分多个Rule,SLD除了可以设置要素厚度和颜色外,还可以用圆形.方形.自定义的图片图形或文字等设置Point,LineString可以渲染成各种线条等,Poly ...

  5. python 腾讯视频签到_利用腾讯云函数设置定时任务实现腾讯视频自动签到获得V力值...

    腾讯视频vip花了钱,还不能自动升级,要每天签到才涨V力值.升级VIP等级..实在蛋疼.这次又是云服务器函数,搞了个脚本COOKIES方式登录.测试了40多天.还没到期,感觉自用够了.分享出来吧..c ...

  6. php oa 开发,OA开发文档_开源OA二次开发说明 - PHPOA软件文档 www.phpoa.cn

    6.3 Linux下WORD转PDF参数填写 请根据"[Linux]PHPOA配置WORD转PDF操作方法"文档中的安装方式,将第三方软件正常安装,然后将参数配置如下: 注:安装完 ...

  7. java filter 返回错误消息_利用java filter 实现业务异常拦截 跳转到错误信息提示页面...

    1.缘由:我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理机制,我们在业务层会跑出我们遇到业务 ...

  8. wincc报表日报表实例_工作系统二次开发二Python加工原膜切割日报表数据实例

    #工作系统二次开发二Python加工原膜切割日报表数据实例 #当查询一个或多个工作令后在表格展示数据前按要求对数据进行二次处理,处理要求看如下 #1.加工单号和母卷物料编号相同则把除第一行外的领料有关 ...

  9. abaqus python二次开发攻略_基于CAE二次开发进行弹簧批量建模

    一. 为什么要进行弹簧批量建模 当一个公司或者学者从事科研任务时,往往通过有限元进行建模分析,建模的时间通常与工作效率挂钩.例如ABAQUS/CAE建模,想必很多老用户都有某种共同的感受,那就是实体模 ...

最新文章

  1. java 变量 动态类型_Java:如何将变量从一种类型动态转换为另一种类型?
  2. DPDK — 扩展私有函数库
  3. python【蓝桥杯vip练习题库】ADV-187 勾股数
  4. 基于Policy Gradient实现CartPole
  5. NeurIPS 2020 | 聚焦自监督学习
  6. 动态加载laydate 失效_Java对象的内存布局+反射的原理+动态代理+ 并发和锁+文末彩蛋...
  7. fedora下配置ipv6 dns服务器
  8. 禁用Alt + F4关闭窗体的一些常用方法
  9. 蓝桥杯 ALGO-43 算法训练 A+B Problem
  10. 【CCCC】L2-030 冰岛人 (25分) 模拟题,二叉树链式存储,从底部向上
  11. 如何查看linux是grub还lilo,Linux下找回忘记root口令(lilo/grub)的方法
  12. 类对象等式括号的意义
  13. 服务器命令压缩文件,使用linux的zip命令压缩文件
  14. 查看linux vnc用户名,VNC远程连接Linux
  15. 去除firefox火狐更新提示
  16. 什么是GB18030编码?
  17. 几个超赞的颜色搭配网站,非常实用!强烈推荐!!
  18. wamp mysql服务无法启动_wamp中mysql无法启动怎么办
  19. python中空格怎么打_Python中如何打印空行
  20. Springboot垃圾分类管理系统836b7计算机毕业设计-课程设计-期末作业-毕设程序代做

热门文章

  1. python提高运行效率_如何提高Python的运行效率 | 萧小寒
  2. 【大话QT之四】ctkPlugin插件系统实现项目插件式开发
  3. VDI云桌面功能目标
  4. 电子会议桌牌或将替代纸质桌牌标签
  5. 原创教程:带ppt课件和讲师画面的教学视频录制完整教程
  6. 去中心化数字身份DID简介——一、基本概念
  7. Web页面快捷键自定义
  8. 寒冬之时,滚烫的社区团购与桎梏中的盒马、永辉
  9. 前端七十二变之html和css入门
  10. 058输入月份号输出英文月份名