基于南方CASS的等高线内插功能的改进*1

2016-07-16 03:03韦相任
地矿测绘 2016年2期
关键词:矢量化等高线辅助线

韦相任

(广东有色金属地质局九三三队,广东 肇庆 526060)



基于南方CASS的等高线内插功能的改进*1

韦相任

(广东有色金属地质局九三三队,广东 肇庆526060)

摘要:在进行数字化地形测量或纸质地形图矢量化成图时,利用南方CASS的等高线内插功能绘制的等高线存在震荡波、内插失效等问题,这往往需要大量的人工修改才能满足出图要求。针对此问题,文章提出了步长滤波优化方法。实践证明,该方法能有效解决等高线内插不合理问题,且能大大减少等高线手工编辑的工作量,提高工作效率。

关键词:地形图矢量化;等高线内插;存在问题;步长滤波;LISP语言

0引言

以AutoCAD应用软件为平台的南方CASS,其自带的栅格图矢量化功能只需插入栅格图像并对图像坐标进行校正后就能对其进行矢量化。其等高线内插功能能够快速对栅格图片的等高线进行矢量化,应用起来十分方便,但在实际应用中存在不少问题,如对较复杂地形进行等高线内插时,会出现震荡甚至内插失效等问题。针对以上问题,本文对等高线局部内插方法进行了探讨,提出“步长滤波法”,并利用LISP语言编程解决了此问题[1-4]。

1利用CASS内插等高线时存在的问题

等高线局部内插是对局部等高线的加密,即在两条等高线之间插入若干条首曲线。实际操作过程为:先手工矢量化两条等高线作为内插的母线,再内插加密首曲线。内插结果要求尽量做到合理,等高线尽量贴近实际。利用南方CASS软件进行等高线内插时,多数情况下能取得较好的效果,如应用于地形变化不大的地方,但对于一些突变地形内插出的等高线会出现震荡,严重失真,如图1所示。这种情况还需手动修改,由于曲线节点较多,手工修改的工程量较大。利用CASS内插等高线时,可以通过改变滤波值的大小来改善所内插出的等高线的震荡问题,但如果滤波太大则会出现等高线节点太少,内插的等高线不合理,甚至出现首曲线与母线相交的情况,如果滤波值太小,又会出现等高线震荡、不够圆滑等问题(见图1)。较合理的内插结果应该如图2所示。

图1 CASS内插的等高线Fig.1 Contour interpolated by CASS

图2 合理的等高线内插Fig.2 Reasonable interpolation contour

2等高线内插的基本原理与存在问题

2.1基本原理

等高线内插主要是利用等高线曲线上离散的节点,按照一定方法进行辅助线构造(见图3)。在两条母线之间插值,实际就是要在这些离散的点间构造合理的辅助线,根据内插等高线条数,以一定距离提取辅助线节点坐标,然后对同一条等高线上节点进行连线、拟合,绘制出等高线。

图3 等高线节点构造辅助线Fig.3 Auxiliary lines constructed with contour nodes

如图3所示,首先取得两等高线母线1与2的线长,从末点开始按一固定距离递减取得等高线上的系列节点坐标,并保存为plist1和plist2。等高线1与等高线2的起点为a1和b1,并分别记a1、b1为final1、final2,表示最后用过的点。final1和final2的坐标分别为(X1,Y1,Z1)和(X2,Y2,Z2),连线a1、b1,此时辅助线a1b1两端点坐标分别为(X1,Y1,Z1)和(X2,Y2,Z2),那么第m条内插等高线对应辅助线等分点的坐标为:

(1)

式中:num表示等高线内插总根数。

根据式(1)内插得到第一个点,然后取得等高线1上第二个节点a2和等高线2上的第二个节点b2。a1、a2和b1连成∠a1a2b1,b1、b2和a1连成∠b1b2a1。用余弦定理,求得∠a1a2b1和∠b1b2a1,比较这两个角大小,如果∠a1a2b1>∠b1b2a1,取a2点并记a2为final1,并连final1和final2;反之取b2点,记为final2,同样连final1和final2。再按式(1)内插出节点,并用多段线与前一个点连线,如此反复直到取得其中一条等高线母线最后一个点时停止。这时再把两条等高线末点按始点方法插出最后点,并与之前点相连线,即以多段线的形式绘出第一条内插等高线,最后将多段线赋予等高线首曲线属性。再循环将剩下等高线绘完。

2.2存在问题

2.2.1节点过多造成内插出的等高线形成震荡

若等高线母线节点数量过多,会导致辅助线过多,造成最终绘制出的等高线形成震荡,如图4所示。

图4 母线节点过多内插效果图Fig.4 The effect chart of more interpolation nodes in busbar

2.2.2节点过少造成内插出的等高线与母线相交或无法内插

若等高线母线节点过少,会导致构造出的辅助线太少,造成内插出的等高线走向出现错误,并与母线相交,如果不与母线相交则又无法内插,如图5所示。

图5 母线节点过少内插效果Fig.5 The effect chart of less interpolation nodes in busbar

3步长滤波优化方法

步长滤波是根据已经绘制好的等高线母线,按小步长提取适当密度母线节点,再按2.1节的方法内插出带有较多小波的首曲线;在此基础上将内插的首曲线按一定步长提取等高线节点,利用提取的节点重新绘制等高线,并将原内插线删除,这样就能有效解决等高线震荡问题,使绘制的等高线更合理。具体方法如下。

3.1母线重新构点

母线重新构点就是不需要原等高线节点,而是在等高线母线上按一定距离步长提取节点,距离适当缩短,使提取的节点适当密些。

3.2首曲线重新构点绘线

按最大角原理[2]内插出首曲线,此时首曲线仍可能存在震荡,可不必理会,但要将内插出的首曲线进行n等分,重新提取点并绘线,也就是在内插出的等高线基础上,根据一定距离提取节点并重新绘线,这样既能保证等高线走向正确又能有效删除等高线的不合理节点,达到滤波效果。与CASS根据滤波阀值减少节点方法相比,该方法内插出的等高线走向更加合理。

3.3判断方向一致性

在手工绘制等高线母线时,画线的起点方向情况可能不同,提取节点时,节点坐标前后顺序可能不一致。这就要求对两条等高线进行判断,并将起点方向不一致的一条等高线的节点坐标先后顺序倒置。本文使用交点法判断两条等高线是否相交,具体方法为:分别取两条等高线的端点坐标,将两端点坐标的起点与起点,末点与末点分别相连,判断它们是否相交,如果相交则起点方向不一致,否则一致。

3.4重复滤波

如果对内插出的首曲线不太满意,可多次按一定距离提取内插线节点,重新绘线以使曲线更加圆滑。

以上优化方法可以有效解决2.2节中提到的问题。

4程序设计

4.1程序设计流程

程序设计流程,如图6所示。

图6 程序设计流程Fig.6 Flow of program degin  注:图6中,num为内插的等高线数量;ql为提取节点的步长;n1和n2分别为提取的两条等高线的节点数量;Final1和Final2分别为用过的最后节点。

4.2具体编程过程

根据等高线内插最大角原则[2]构造辅助线,并利用余弦定理计算角度,再判断角的大小,取最大角度辅助线两端点坐标并按式(1)插出内插线节点,按步长提取插出线节点重新绘线,具体实现代码如下:

余弦定理计算角度

(setq w1(+(expt(-x11 x2)2)(expt(-y11 y2)2))w2(+(expt(-x11 x1)2)(expt(-y11 y1)2))w3(+(expt(-x1 x2)2)(expt(-y1 y2)2))w4(*(* 2(sqrt w1))(sqrtw2))w5(/(-(+ w1 w2)w3)w4)));

(setq v1(+(expt(-x22 x2)2)(expt(-y22 y2)2))v2(+(expt(-x22 x1)2)(expt(-y22 y1)2));

(Setq v3(+(expt(-x1 x2)2)(expt(-y1 y2)2))v4(*(* 2(sqrt v1))(sqrt v2))v5(/(-(+ v1 v2)v3)v4)));

判断角度的大小,并取较大角辅助线另一端点坐标。

(if(>= w5 v5)

(setq final2 final22 i(-i 1))

(setq final1 final11 j(-j 1)));;; 结束if

按距离提取插入线节点并重新画线。

(entdel dline);;删除原插出线

(setq ndl(length subplist));;;取得曲线长度

(vl-cmdf "pline");

(while(> ndl 0)

(vl-cmdf(nth(-ndl 1)subplist))

(setq ndl(-ndl 1))

(if(= ndl 0)(vl-cmdf "")));;;;结束while

(setq dlinename(entlast))

给画出的多段线赋等高线属性值。

(command "change"dlinename """p" "c" "bylayer" "lw" "bylayer" "la" "dgx" "lt" "continuous" "s" 1 "t" 0 "");

(vl-cmdf "putp" "c" "201101" dline "")

(vl-cmdf "pedit" dlinename "s" ""));;结束赋值

(setvar "osmode"osmod1);;;还原捕捉状态

(command "regen");;刷新。

4.3内插结果比较

步长滤波编程内插处理结果与CASS自带程序内插结果的

比较,如图7(a)、(b)所示。由图可见,编程内插处理取得的效果更好。

图7 CASS及优化法内插结果比较Fig.7 The comparison of interpolation results obtained between using CASS and optimization method

5结束语

等高线内插的关键是构造合理的辅助线以及正确的虑波方法,而辅助线的构造是由等高线母线上的节点决定的。合理的等高线内插,需要合理提取等高线母线节点,使构得的辅助线在提取节点并绘制内插线时,线的走向与母线一致,并且位置合理。步长滤波优化法,是以内插出的等高线为基础,按一定步长提取节点,并根据提取的节点重新绘制新的内插线,这样能有效解决等高线震荡问题。本文通过LISP语言编程实现了等高线内插的自动化,不仅大大减少了等高线手工修改的麻烦,同时也提高了等高线绘制的准确性和精确度。

[参考文献]

[1]胡卫明,吴兵,凌海滨.地图等高线自动内插算法[ J].计算机学报,2000,23(8):847~ 851.

[2]李洪玉,唐诗华,李景文,李永香.在CAD中实现等高线自动内插的一种方法[J].海洋测绘,2004,24(3):52-53.

[3]张宝雷,宋孟强,周万村.棕版地形图上等高线的自动提取和批量赋值[J].测绘科学,2006,31(4)::81-83.

[4]王玉琨,任卫红,矛艳,等.CAD二次开发技术及其工程应用[M].1版.北京:清华大学出版社,2008.

Improvement of Contour Interpolation Function Based on SOUTH CASS

WEI Xiang-ren

(933TeamofGeologyBureauforNonferrousMetalsofGuangdongProvince,ZhaoqingGuangdong526060,China)

Abstract:Using the contour interpolation function in SOUTH CASS software to draw contour, there are some problems such as shock wave, interpolation failure and so on when carried out digital topographic survey or vectorization of existing papery maps, which often need to make a lot of artificial modification to meet the requirements of specification of topographic mapping. To solve these problems,the optimization method of step filtering was presented in this paper. Practice has proved that this method can effectively solve the problems of contour interpolation,and also can greatly reduce the workload of manual editing contour and improve work efficiency.

Key words:vectorization of topographic map;contour interpolation; existing problems; step filtering; LISP language

* 收稿日期:2016-03-08

中图分类号:P 208; TP 391.4

文献标识码:B

文章编号:1007-9394(2016)02-0035-04

作者简介:韦相任(1990~),男(壮族),广西桂平人,学士,助理工程师,现主要从事工程测量以及变形监测方面的工作。

地矿测绘2016,32(2):35~38

CN 53-1124/TDISSN 1007-9394

Surveying and Mapping of Geology and Mineral Resources

猜你喜欢
矢量化等高线辅助线
两种重要的辅助线
等高线地形图的判读和应用
浅谈辅助线在数控切割中的应用
地形图的阅读
一种基于Fréchet距离的断裂等高线内插算法
遇见角平分线如何作辅助线
农村土地承包经营权确权登记调查底图制作方法的探究
DEM的建立及其在林业上的应用
“等高线地形图的判读”专题测试
交互式矢量化技术在水文站网分布图编绘中的应用