黄臻 蔡小青 姜春旭
摘要:CorelDRAW软件因其强大的平面美化功能在专题地图制圖领域应用广泛,但作为一款矢量绘图软件,CorelDRAW并不具备专业的地图质检功能。因此,本文提出利用VBA语言对CorelDRAW进行二次开发,实现图面压盖、道路悬挂、道路连接等问题自动化检查功能。实践表明,该方法能快速、准确地发现问题,节约了人工检查时间,提高了地图质检效率。
关键词:CorelDRAW;VBA;地图质检;图面压盖;道路悬挂;道路连接
0 引言
地图的表达错误直接影响地图的正确使用,信息的错误传递也会造成读图的不适和误解。一幅完整地图产品的呈现,还需要通过一系列严密的质量检查环节。传统的地图数据质检通常由人工进行逐屏检查,检查速度和质量完全依赖检查人员,检查结果往往不全面,还会有遗漏。
在专题地图编绘领域,具备极强平面编辑和美化功能的CorelDRAW软件颇受制图工作者的喜爱。虽然它在成图制图方面能很好满足需求,但在地图质检方面,还很难找到适用的工具去辅助检查工作。CorelDRAW从10.0版本以后开始支持VBA二次开发[1],逐步实现了符号替换[2]、河流渐变[1]、中英文注记对照[3]等繁复操作的自动化处理。
目前,国内相关学者针对CorelDRAW地图制图数据质检方面的研究还比较少,主要集中在制图方案的标准化检查[4],如图层分层的规范检查、符号和注记正确表示检查、符号和图层一致性检查等,对于在图面压盖、道路悬挂、道路连接问题方面的检查并没有给出很好的解决方案。
因此,本文提出了利用VBA语言二次开发扩展CorelDRAW软件的地图数据质检功能的一个解决方式,实现图面压盖、道路悬挂、道路连接等问题的自动化检查,从而提升检查质量和效率。
1研究目标
本文从CorelDRAW地图数据质检的一般流程出发,以减少人工检查工作量和提高检查准确性为目的,总结知识经验,将检查规则转化为算法思路,基于CorelDRAW VBA平台,通过二次开发检查辅助模块,实现对CorelDRAW地图数据在图面压盖、道路悬挂、道路连接方面问题的自动化检测和提取,旨在快速、准确地发现和定位图面问题,辅助质检人员精准掌握问题底数,弥补CorelDRAW软件在地图质检功能方面的缺失。
2功能设计
地图数据质检模块是在现有成熟地图质量体系的基础上,按照一般地图的质检逻辑和流程进行设计,开发能够在CorelDRAW软件中进行交互执行的自动化检查程序,扩展软件的地图质检功能,实现图面压盖、道路悬挂检测和道路连接的机助检查和问题上报。
3实现方法
3.1图面压盖检查模块
该模块包括图层内部和图层之间的图形压盖检查。根据指定的待检图层,分别对图层内部和图层之间的所有图形和注记要素进行相交运算,通过判断相交关系来确定图面要素之间是否存在压盖冲突。若存在相交关系,则读取交集区域的四至坐标构建矩形框,作为压盖问题返回视图进行显示。为了提高检查效率,缩小检测范围,通过调用CorelDRAW的空间搜索函数Page.SelectShapeFromRectangle(s.Left,s.TopY,s.RightX,s.BottomY,True),对所有待检图形和注记建立外接矩形范围,只在该范围内进行空间相交运算。
3.2道路悬挂检查模块
悬挂点是指线段的端点悬空,没有和其他线段相连的点。由于悬挂节点位置不同,主要体现有多边形不封闭、不及或过头、节点不重合(不接头)等几种情况。无论是过头还是不及都有一个共同的特征,也就是悬挂点处只有一条线连接。因此,悬挂点的检查可通过计算线段的首尾端点在容差范围内是否存在其他线段来实现,若不存在,则判定为悬挂点。
CorelDRAW地图数据与GIS数据不同,其坐标为图面坐标而非真实的空间坐标,因此,容差的选取应在图面坐标系统下考虑,具体参数值需根据实际地图精度要求来确定。
整个算法思路是,首先遍历道路检查层内的所有弧段线,获取弧段首尾端点X、Y坐标值。分别以弧段的首尾端点作为圆心,根据给定的容差半径定义容差圆范围。然后依次在每个容差圆范围内,通过IsOnShape(Double x,Double y,Double HotArea)函数查找并计算与容差圆相交的所有弧段的数量N。若N = 1,则判定构建该容差圆的端点为悬挂点,若N ≧ 2,则该端点不悬挂。最后以判定后的悬挂点作为圆心,绘制悬挂标示圆并通过视图显示,供人工判读检查结果。
3.3道路连接检查模块
等级道路在地图中表示时,其符号的上下叠置关系是根据道路本身的等级次序所决定的,一般道路的等级越高,对应符号的叠放次序越靠上。对于双线绘制的道路符号,其符号一般由道路中心线和道路边线组成,为了正确表达道路交叉口的汇交情况,双线的等级道路符号在叠放次序上将中心线和边线分开,中心线按道路等级次序排放后,再往下依次叠放相应的道路边线;对于单线道路符号,则一般叠放在所有双线道路边线的下一层平面,并分别按对应的等级顺序进行叠放。根据上述的表示原则,确定道路连接检测算法思路如下。
首先指定一个道路符号的正确叠置样例层,该层是根据实际地图的道路分级进行规范符号化和正确次序叠放的一个参考样例。然后选取参与检查的所有道路图层,按图层由上至下的排序,依次遍历所有道路层中的每一个道路图形,同参考样例层逐个进行比对,通过与样例层的每一个道路符号的轮廓线型、线宽、颜色模式、颜色值进行一一匹配,若所有条件都匹配,则返回一个序号K,K为匹配成功的样例层内的符号层叠的顺序号,顺序号从1起算,按步长为1进行递增,即1,2,3,……,n,n为样例图层中所有图形的总数,顺序号越大表示对应的符号叠放的顺序越往后;若与样例层所有符号比对完后都未匹配成功,则表示该道路图形不符合参考样例的符号化要求,即符号化不正确,则顺序号赋值为0,并将该图形提交至道路符号化错误检查结果图层。最后,针对顺序号不等于0的道路符号再依次作两两排序检查,两两检查中发现上一个图形顺序号大于下一个图形顺序号的,则判定为道路叠置顺序错误,将上一个图形提交至道路连接错误检查结果图层。
4结语
地图数据自动化质检模块的初步研究主要针对CorelDRAW软件缺乏地图质检功能的问题,通过VBA语言设计并实现了基于CorelDRAW平台的地图制图数据检查程序,用户可以在检查程序中设置检查图层和容差,由程序读取待检图层内的地图要素进行自动化检查分析,并通过地图视窗返回图面压盖、道路悬挂和道路连接错误结果。经测试,检查一幅全开行政区划地图的时间由3小时缩短为10分钟,极大地提高了检查效率。
目前,研究过程中还发现一些问题,通往居民地的断头路会被视为悬挂问题返回,实际在做道路悬挂检查时,还需要考虑与居民点的连通关系,道路端点处虽无其他道路连接但与居民点连通时,可不作为悬挂处理。因此,本文设计的质检程序尚不能完全替代人工检查,对于一些合理的图面表达,还需要检查人员进行人工判断,这也是下一步程序需要进行完善的地方。
参考文献:
[1] 吴泽权,陈葵庄,覃涛.基于VSTA的CorelDRAW二次开发在地图制图中的应用[J].测绘与空间地理信息,2020,43(10):216-219.
[2] 董洪霞,刘健,王海涛.基于CorelDraw VBA的制图功能扩展模块研究[J].测绘与空间地理信息,2017,40(10):188-189+192.
[3] 黄臻.基于CorelDRAW X5平台下的中英文注记自动匹配的研究[J].经纬天地,2017(04):24-27.
[4] 戴相喜,施一军,陈磊.CorelDRAW地图制图数据质量自动化检查方法研究[J].城市勘测,2016(03):59-62.