APP下载

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

2017-06-19黄军胜

测绘通报 2017年5期
关键词:等高线二次开发示例

刘 洪,黄军胜

(1. 广西有色勘察设计研究院,广西 南宁 530031; 2. 广西壮族自治区水利电力设计研究院,广西 南宁 530023)

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

刘 洪1,黄军胜2

(1. 广西有色勘察设计研究院,广西 南宁 530031; 2. 广西壮族自治区水利电力设计研究院,广西 南宁 530023)

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

数字地形图;等高线;高程点;点线不符;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 排序后等高线的顺序

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

图4 高程点错误示例图1

图5 高程点错误示例图2

如果H2

如果H2>H3,即H1>H3,则HA必小于H1,否则此高程点错误。

图6 高程点错误示例图3

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

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

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

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

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

图7 等高线错误示例图1

图8 等高线错误示例图2

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

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

2.2.5 特殊情况

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

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

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

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

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

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

3 编程实现

3.1 编程环境配置

操作系统:MicrosoftWindows10中文旗舰版64位操作系统。

硬件开发环境:联想笔记本昭阳E49A。

软件开发环境:MicrosoftVisualStudio.NET2008+ObjectARX2010。

软件运行环境:AutoCAD2010。

3.2 编程核心算法

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

if(JdStruct.Length> 2)∥3条以上情况

{if(Math.Abs(JdStruct[2].Gc-JdStruct[1].Gc) ==DengGaoJu&&Math.Abs(JdStruct[1].Gc-JdStruct[0].Gc)!=DengGaoJu)

{ ∥第1条等高线有问题

CreateJianChaYuan(JdStruct[0].JD, 190,GScale,0.25);∥绘制标错圆

CreateText(String.Format("线"),JdStruct[0].JD,GScale, 0.8, "检查");

}

{ ∥第2条等高线有问题

CreateJianChaYuan(JdStruct[1].JD, 190, GScale, 0.25);∥绘制标错圆

CreateText(String.Format("线"), JdStruct[1].JD, GScale, 0.8, "检查");

}

if (Math.Abs(JdStruct[1].Gc - JdStruct[0].Gc) == DengGaoJu && Math.Abs(JdStruct[2].Gc - JdStruct[1].Gc)!= DengGaoJu)

{∥第3条等高线有问题

CreateJianChaYuan(JdStruct[2].JD, 190, GScale, 0.25);∥绘制标错圆

CreateText(String.Format("线"), JdStruct[2].JD, GScale, 0.8, "检查");

}

}

4 验证效果

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

图11 程序运行开始界面

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

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

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

图13 错误查找结果

5 结 语

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

[1] 洪涛,谭仁春,李宁. AutoCAD数据自动创建ArcGIS“地图瓦片”服务的方法研究[J]. 测绘通报,2015(12): 85-87.

[2] 余代俊,蒲朝旭,朱逍贤. 基于AutoCAD二次开发的高斯投影转等积割圆锥投影[J]. 测绘通报,2013(7): 71-73.

[3] 胡绍辉, 陈海英, 魏叶敏. AutoCAD 2004平台下农村宅基地宗地图批量生产软件的研发[J]. 测绘通报,2016(9): 83-86.

[4] 詹必伟,高颖,翟翔,等. 基于AutoCAD的DLG自动化质量检查探究[J]. 测绘通报,2014(10): 111-113.

[5] 郭沛沛,李成名,殷勇.建筑物合并的Delaunay三角网分类过滤法[J]. 测绘学报,2016,45(8): 1001-1007.

[6] 窦世卿,赵学胜,刘成军,等. 河网线要素与DEM综合的三维Douglas-Peucker算法[J]. 测绘学报,2016,45(4): 450-457.

[7] 李国辉,许文帅,龙毅,等. 面向等高线与河流冲突处理的多约束移位方法[J]. 测绘学报, 2014,43(11): 1204-1210.

[8] 冯向前. 使用ObjectARX实现自动检查点线矛盾[J]. 城市勘测,2008(2): 115-118.

[9] ROBINSON S, NAGEL C. C#高级编程[M].3版.北京:清华大学出版社,2005.

[10] 李冠亿. 深入浅出AutoCAD.NET二次开发[M].北京:中国建筑工业出版社,2012.

[11] 杨坤. 可视域分析算法的并行化与容错研究[D].南京:南京师范大学,2014.

[12] 蔡伟明.一种基于AutoCAD平台高程值检查功能的开发[J].矿山测量,2010(3):26-28.

[13] 董玉德,赵韩. CAD二次开发理论与技术[D].合肥:合肥工业大学出版社,2009.

[14] 陆贻豪.ObjectARX在城市地下排水管道上的开发[J].科技风,2016(14):154-155.

[15] 秦洪现,崔惠岚,孙剑.Autodesk 系列产品开发培训教程[M]. 北京:化学工业出版社, 2008.

Using Secondary Development of AutoCAD to Automatically Find Errors of Elevation Points and Contour Lines in Digital Topographic Map

LIU Hong1,HUANG Junsheng2

(1. Guangxi Nonferrous Survey and Design Institute, Nanning 530031, China; 2. Guangxi Water and Power Design Institute, Nanning 530023, China)

This paper discusses the possible causes of the elevation point and contour errors in digital topographic map, analyzes the spatial location relationship and the mathematical relationship of the elevation point and contour in the topographic map, with the mathematical relationship working as a judgment condition. It discusses the solutions and judgment rules, and shows the realization of finding out its mistakes’core codes through computer program. This research is very meaningful to reduce the labor intensity of inspection personnel while checking elevation point and contour errors in the digital topographic map so as to improve the working efficiency.

digital topographic map; contour; elevation point; no conformation between the point and line; C#

刘洪,黄军胜.利用AutoCAD二次开发实现地形图高程点与等高线错误自动查找[J].测绘通报,2017(5):100-104.

10.13474/j.cnki.11-2246.2017.0164.

2016-11-22;

2017-02-06

刘 洪(1974—),男,硕士,高级工程师,从事大地测量与测绘工程工作。E-mail: 36682165@qq.com

P208

A

0494-0911(2017)05-0100-05

猜你喜欢

等高线二次开发示例
等高线地形图的判读和应用
2019年高考上海卷作文示例
地形图的阅读
西门子Operate高级编程的旋转坐标系二次开发
浅谈Mastercam后处理器的二次开发
一种基于Fréchet距离的断裂等高线内插算法
“全等三角形”错解示例
西门子Easy Screen对倒棱机床界面二次开发
“等高线地形图的判读”专题测试
飞吧,云宝