黄会平,韩宇平,张俊峰
(华北水利水电大学,河南 郑州450045)
多幅等高线接边是GIS 地图数据处理过程中经常会遇到的一项工作. 传统的拼接需要在软件中手工接边,工作量大且由于数据的精度问题,相邻图幅上的等高线常常不能够很好地吻合. 一些GIS 软件中带有图幅接边的模块,如ArcGIS 中的Edge-Match.但是,在现实的数据处理过程中,这些模块的功能还不能满足要求.首先,使用这些接边模块时仍然需要较多的人工干预,比较繁琐;其次,大多数接边模块进行接边处理时仅考虑相邻图幅上地理要素的几何关系,而没有充分利用属性信息,这在某些情况下进行等高线的接边,容易造成逻辑错误.
当前,国内已有学者提出了图幅接边问题的解决方案.如邓小军等详细分析了等高线的图幅接边问题,对各种相邻图幅等高线接边误差的形式做了分类[1-4],具有一定的代表性.笔者提出了一种兼顾几何关系和属性特征的等高线图幅自动接边算法,并利用ArcGIS Engine(AE)组件所提供的空间操作功能,在Microsoft Visual Studio 2010 环境下,实现了这一算法.
由于比例尺大小、成图纸张大小、图纸的形变、绘图误差、数字化误差和分幅数字化等因素的影响,在相邻两幅等高线图中,位于接边附近的等高线在几何位置上不能很好地吻合,且由于各种人为因素,原本是一条连续的等高线也会被分为多段,在数据库中被分成不同的对象进行存储[5]. 主要表现为错位、数据不完整、重复、变形等.
接边处附近的某一等高线,理论上应与邻接图幅上对应的等高线是一条等高线,是完全吻合在一起的,即这两条等高线的端点坐标中有两个点的坐标是相同的[6](首首相同、末末相同或首末相同).但在实际工作中,由于各种原因,分布在不同图幅的同一等高线之间存在缝隙,如图1所示.
图1 拼接时同一等高线中存在缝隙
根据等高线是闭合曲线的原理,将多幅等高线合并成一幅等高线图时,等高线在接边处应与其对应等高线合并成一个对象,从而构成一条闭合曲线.但由于分幅数字化的原因,会出现等高线没有延伸到另一侧或者接边线另一侧多出了不必要的线段等,如图2所示.需要对重复或缺失的等高线删除或者补充完整.
图2 等高线重复或者缺失
对应等高线在接边处表面上表现为一条完全闭合的等高线,但实质却是多条等高线,这种现象往往具有欺骗性.因为在打印出图和视觉上不会发现问题,但是要用于构建DEM 或TIN,或者用于拓扑分析时,就会出现意想不到的问题.
参与接边的图幅应该具有相同的地图数学基础,包括相同的比例尺、坐标系统和高程基准[7]. 属性数据必须正确.该算法设计的思路是按等高线的属性信息作为约束条件判断两条是否是同一条等高线,所以在接边前,必须保证每条等高线被正确赋以高程值.
2.2.1 确定参与接边的对象
在进行等高线拼接时,所处理的对象主要为位于图幅边界并在理论上延伸至相邻图幅的线段,在接边之前,必须要确定参与接边的要素[8]. 该设计的思路为:读入需要拼接的矢量要素图层,用户根据需要拼接图幅等高线的实际分布情况给定一个阈值d,以这个阈值d 为大小,求取边界线两侧的矩形缓冲区,和缓冲区相交的等高线参与下一步的接边,否则不参与下一步的操作,从而加快了处理速度.选择一个图幅为主图幅(通常为左图幅或上图幅),其中的要素为主要素,选择一其他图幅为副图幅,其中的要素为副要素.
2.2.2 确定接边的各种情况
1)图幅接边方向和线段方向. 参与接边两条线段并不知道在哪个图幅中,程序执行中必须进行判断,判断的方法是:取每条等高线的中点(X,Y),若一图幅所有等高线的X 值均大于或小于另一图幅,则为左右接边;若一图幅所有等高线的Y 值均大于或小于另一图幅,则为上下接边.
在接边时还必须考虑参与接边的两线段的方向[9-10].对参与接边的两线段的方向一般有首末—首末、首末—末首、末首—末首和末首—首末4 种情况.
2)接边等高线的空间形状.接边时两幅图中等高线从形态上可分为两类:圆环接边和普通接边.由于矢量化的误差,在分幅等高线接边时,一图幅中的等高线会超越边界进入另一图幅,造成等高线过头,如图3和图4所示. 接边时必须将过头的点从线中删除(即回撤一个点,若仍然过头,则继续回撤,直到端点回到等高线所在的图幅),然后调整两线段使其方向一致.
图4 普通接边存在的情况
经过处理后将两个点集添加到新的点集中,生成新的直线,完成两线段的合并处理,其利用Arc-GIS Engine 在Microsoft Visual Studio 2010 环境中的处理流程如图5所示.
图5 两线合并的处理流程
等高线经一系列处理(图层合并、顺序调整、参与要素选择等)得到接边要素,并经过2.2.1 节和2.2.2 节处理以后,选中需要接边的等高线集,采用振荡法进行遍历,选定一条等高线,若在距离r 内没有与之属性相等的等高线,增加距离为,直至找到和它属性相等的等高线并标记;若在距离r 内有两条属性值相等的等高线(不是圆环而是如山脊线、山谷线等普通接边的情况)则距离变为,直至找到和它属性相等的等高线并标记;若在距离r 内恰好有一条属性值相等的等高线,则直接标记.
找到唯一等高线后,需要分3 种情况进行考虑:若两条等高线端点距离d 大于给定阈值r2,则两条等高线不处理;若两条等高线端点之间的距离r1<d <r2时,则分别把两条等高线的端点连接到边界线上两个端点之间的中点;若两条等高线端点距离小于给定阈值r1,则采用强制法把副要素的端点拖到主要素端点上实现端点吻合,进一步实现两线的合并.其流程如图6所示.
图6 智能接边流程图
“貌合神离”现象的产生,可能是在矢量化的过程中由于一条等高线过长,为了方便矢量化,人为地将同一条等高线划分成N 段,它们从视觉角度看是一条封闭的等高线,实际上是多条线段组成一条,在构建拓扑时会出现错误.
该程序处理此现象时,根据线段的高程值相等进行处理,通过AE 的属性过滤器(IQueryFilter)和空间过滤器(ISpatialFilter)得到高程值相等的所有线段,然后根据ITopologicalOperator2 的Union 实现等高线的合并[11].
在等高线接边过程中,若两条属性相等的等高线两个端点之间的距离大于给定的阈值r2,说明数字化过程中存在的不是误差而是错误,需要根据原有的地形图把缺失部分的等高线补充完整,若没有原始地形图,则可根据等高线走势做插值处理,然后再手工或重新执行前面的自动拼接处理.
该程序在接边实现时采用强制法和平均法实现两相邻图幅的等高线拼接处理,在等高线比较密集的区域会产生相邻等高线交叉的情况,拼接后要对整个图幅的线状要素做拓扑检查,检查出等高线相交的要素并人工加以处理.
针对目前GIS 软件在等高线接边处理方面的不足,以ArcGIS Engine 和Microsoft Visual Studio 2010为开发平台,进行了等高线智能接边的研究,完善了GIS 软件在接边时仅考虑几何关系的不足,综合考虑几何关系和属性值,初步实现了对大量等高线接边的快速处理,提高了工作效率,并提供交互式的操作界面,避免了大比例尺地图直接进行接边所产生的未知错误,提高了接边的准确性.
[1]邓小军,郑小梅.基于AO 的分幅等高线智能化接边处理方法的研究[J].四川测绘,2004,27(2):77-81.
[2]赵相伟,孙翠羽,艾波,等.基于索引图的大比例尺图幅自动接边方法研究[J].测绘信息与工程,2007,32(4):34-36.
[3]金江峰.基于MAPGIS 的河南省土地境界接边管理系统的设计与实现[J]. 科学技术与工程,2009,9(2):391-394.
[4]周顺平,张江东,左泽均,等.线要素任意范围接边算法的设计与实现[J].测绘科学,2012,37(9):20-26.
[5]赵江洪.GIS 中多图幅自动接边的方法探讨[J].测绘通报,2006(2):50-52.
[6]刘庆元,周容.一种基于ArcGIS Engine 的线状图幅接边方法[J].计算机时代,2008(2):4-6.
[7]曹丽娟.基于ArcObjects 的多图幅自动接边研究与实现[J].软件导刊,2010(9):49-51.
[8]龚健雅,杜道生,李清泉,等. 当代地理信息技术[M].北京:科学出版社,2006.
[9]李智广. 基于GIS 的土壤侵蚀数字图接边方法研究[J].水土保持通报,2001,21(4):41-43.
[10]孙丽娜,李吉之,陈静. 基于AO 的同比例尺地形图无缝接边技术及其实现方法[J].测绘工程,2007(6):49-53.
[11]蒋波. ArcObjects 开发基础与技巧[M]. 武汉:武汉大学出版社,2006.