APP下载

一种面要素接边检查算法

2021-03-09标,陈

测绘工程 2021年2期
关键词:边线结点组件

张 标,陈 楠

(1.自然资源部陕西基础地理信息中心,陕西 西安 710054;2.长安大学 地质工程与测绘学院,陕西 西安 710054)

矢量数据接边在数据入库和更新中有非常重要的作用[1-2]。矢量数据一般由点、线、面3类要素组成,其中点要素不存在接边问题、线要素接边较为简单,面要素接边要求接边线两侧的面要素位置相互匹配,且位置相互匹配的两个面要素的属性相同。在地理信息数据中,面要素的大小、形状皆具有任意性,没有规律可循,因而其接边检查较为复杂[3]。针对面要素数据接边问题,许多学者做了大量的研究工作。文献[4]提出一种基于距离与角度控制的矢量面数据接边检查方法,该方法利用矢量面到接边线的距离值与弧段转角角度值作为参考量检测接边特征点[4]。文献[5]提出基于矢量ID映射的“虚拼接”算法,实现一种自动化图幅接边的虚拼接方法[5]。文献[6]提出一种基于索引图的DLG接边检查算法,该算法首先利用标准图幅号计算图幅角点坐标生成索引图,再通过对索引图中记录的各相邻图幅中的面状要素进行批量接边检查工作[6]。文献[7]提出一种基于点搜索的矢量接边检查算法,可用于不规则区域边界间的面要素接边检查工作[7]。文献[8]利用FME的数据处理功能,设计一种针对地理国情监测数据中面要素和线要素接边情况的检查方法[8]。

上述学者的研究工作主要是面向按照标准分幅或按行政区划进行组织管理的数据接边,以图幅边线或者行政区域境界曲线作为接边线进行接边检查,但在实际数据生产工作中,并不是所有需要进行接边检查的矢量面要素数据中都存在接边线,如在天地图省市数据融合项目中,从市、县地区收集的大比例居民地要素和植被要素数据,由于缺少图幅边线要素导致无法有效开展数据接边检查工作,如果采用人工方式直接进行检查,一则检查工作量较大,二则检查结果可靠性较低。为了解决一些大比例尺面要素数据在没有接边线的情况下如何进行接边检查的问题,本文提出一种面要素接边检查算法,并对算法的关键环节进行详细阐述。利用ArcGIS Engine相关组件,在Visual Studio开发环境下进行算法实现,形成面要素接边检查工具,通过实例论证其有效性和可靠性。

1 面要素接边的原则与特点

1.1 面要素接边原则

进行接边的两个面要素在实际地理环境中属于同一个地理要素,因此两个面要素正确接边需要同时满足几何条件和属性条件[9-10]。

1.1.1 几何条件

几何条件是指接边的两个面要素的几何图形在接边线处有公共边。理论上接边的两个面要素的几何图形是相接关系,但由于数据编辑方式、分幅裁切等因素,接边的两个面要素还可能存在部分重合、分离等拓扑关系,因此在进行面要素接边检查时需考虑图形到边限差和图形接边限差。图形到边限差是根据接边线生成接边缓冲区的阈值,是判断面要素是否需要进行接边检查判断的重要参数。图形接边限差是指位于接边缓冲区内的相邻图幅的面要素之间是否满足接边要求的阈值。

1.1.2 属性条件

属性条件是指接边的两个面要素的属性信息完全一致。属性信息完全一致可以是狭义上的信息一致,也可以是广义上的信息一致。狭义上的信息一致是指两个接边要素的属性字段名称与属性字段内容完全一致。广义上的信息一致是指两个接边要素采用不同的属性字段名称或属性字段内容描述同一个属性概念。如两个接边要素可以分别使用“GB”“CC”“CODE”“CLASID”等属性名称描述要素分类代码,使用属性字段内容为“一等”“二等”“一级”“二级”来描述同一个等级属性信息。在一般情况下,选择狭义上的信息一致来判断接边的两个面要素是否满足属性条件。

1.2 面要素接边特点

通过对面要素接边原则中几何条件的分析,结合面要素几何图形的特征,可以总结出面要素接边的特点:

1.2.1 接边线处两侧边线长度一致

由于接边的两个面要素需要满足几何条件,即几何图形在接边线处有公共边,因此可以总结出两个面要素在接边线处两侧边线的长度是一致的。如图1(a)所示的面要素A与面要素B接边,理想状态下面要素A的边线a1a2中上的结点a1与面要素B的边线b1b2中的结点b1位置一致,结点a2与结点b2位置一致,从而边线a1a2与边线b1b2的长度是一致的,但实际情况中,结点a1与结点b2,结点a2与结点b2的位置有可能不完全一致,但两边线长度大体上是一致的。

1.2.2 接边线处两侧边线角度一致

接边的两个面要素在接边线处两侧边线除了长度一致外,其角度也是一致的,即边线a1a2与边线b1b2的角度相等或相差180°。此外不仅仅是两个接边面要素的两侧边线角度一致,在同一条接边线上,多个接边面要素的两侧边线角度也是一致的。如图1(b)所示,面要素A与面要素B的两侧边线角度与面要素C与面要素D的两侧边线角度是一致的。

图1 面要素接边特点

2 面要素接边检查算法描述

在分析面要素接边原则和接边特点的基础上,提出一种面要素接边检查算法,其详细流程如图2所示,算法的主要环节包括获取面要素接边线、相接要素几何检查、缓冲要素几何检查、属性检查、无效接边结果过滤、检查结果输出等。

图2 面要素接边检查算法流程

2.1 获取面要素接边线

传统基于接边线的检查方法是根据接边线生成接边缓冲区,进而通过空间过滤器快速过滤得到需要进行接边检查的面要素。但本次研究的矢量数据中没有图幅边线要素,因而只能对矢量数据中的所有面要素逐个处理,从面要素本身的几何图形中寻找可能的接边位置。一般情况下大比例尺矢量数据采用矩形分幅的方式进行数据组织,图幅边线的角度一般为0°(180°)或90°(270°)。因此如果当前面要素本身的几何图形中有连续两个或多个结点的角度为0°(180°)或90°(270°)时,认为当前面要素有可能存在接边要素,这些连续的结点是可能的接边位置,将这些连续的结点构成的线段提取出来,作为当前面要素的接边线。

2.2 相接要素几何检查

按照面要素接边原则中的几何条件,与当前面要素可能存在接边关系的其他面要素与其是相接关系,并在接边线处有公共边。因而可以通过相接要素几何检查的方法进行检查。相接要素几何检查的流程如下:①按照2.1节的方法获取当前面要素的接边线,并根据空间相接关系得到与当前要素可能存在接边关系的其他面要素。②当前面要素与其他面要素求解相接线,相接线是指两个面要素求交得出的线结果,根据面要素接边“接边线处两侧边线长度一致”的特点,相接线的长度与接边线的长度也应该是一致的,考虑到两者长度可能不会完全一致,因而可以通过两者长度之比进行判断。③相接线与接边线进行长度比的判断,符合阈值的则认为这两个接边面要素满足几何条件,反之则不满足。如图3所示,面要素A与面要素B满足几何条件。

图3 相接要素几何检查

2.3 缓冲要素几何检查

除了相接要素几何检查外,由于数据编辑方式、分幅裁切等因素,在实际数据中还存在一些空间关系相离,但却是属于同一要素的面要素。如图4所示,面要素A与面要素B虽然是相离关系,但可以看出这两个面要素属于同一要素,需要通过缓冲要素几何检查将其查找出来。由于参与检查的接边面要素是相离关系,无法求解出相接线,因此缓冲要素几何检查的流程如下:①按照2.1节的方法获取当前面要素的接边线,并生成接边缓冲区过滤得到与当前要素可能存在接边关系的其他面要素。②按照2.1节的方法获取可能存在接边关系的其他面要素的接边线。③对两个接边线进行长度比、角度和距离的判断,符合阈值的则认为这两个接边面要素满足几何条件,反之则不满足。

图4 缓冲要素几何检查

2.4 属性检查

属性检查是在两个接边面要素满足几何条件的基础上进行逐个属性字段内容比较,判断属性字段内容是否一致。如果所有属性字段内容一致则说明两个接边面要素满足属性条件,为同一要素,将面要素本身和接边线加入到接边候选集中,反之则不做处理。

2.5 无效接边结果过滤

无效接边结果过滤是该算法中的一个重要环节。由于采用逐要素检查的方式,因此有可能会将一些不在接边线处的要素加入到接边检查结果中,这些检查结果属于无效接边结果,需要将其过滤掉,否则会降低接边检查的准确率,并造成后续排查工作量的增加。根据面要素接边“在同一条接边线上,多个接边要素的两侧边线角度也是一致”的特点,可以将无效接边结果进行过滤,其流程如下:①从接边候选集中任选一条接边线,获取其角度和坐标,如果是水平角度则获取其y方向的坐标,如果是垂直角度,则获取其x方向的坐标。②遍历接边候选集中的其他接边线及其角度和坐标,如果其他接边线与当前接边线角度一致,y方向的坐标或x方向的坐标的距离差值满足阈值要求,则认为当前接边线是有效接边结果。③反之,如果遍历完接边候选集中的所有其他接边线后,没有与当前接边线角度和坐标一致的其他接边线,则可以认为当前接边线是无效接边结果,将该接边线及其对应的面要素从接边候选集中剔除。④对接边候选集中所有的接边线进行处理,过滤掉无效接边结果。如图5所示,与接边线1角度和坐标一致的有接边线2、3、4。没有与接边线5角度和坐标一致的其他接边线,接边线5属于无效接边结果,将其过滤掉。

图5 无效接边检查结果过滤

2.6 检查结果输出

接边检查结果数据库中的要素设计为面类型,将接边检查错误或缓冲检查错误的面要素写入到数据库中,同时将接边错误类型、错误内容等检查结果信息写入到面要素的属性字段中。这种方式的优势在于将检查结果与原始数据叠加时,可以准确定位接边检查错误的面要素及相关错误信息,便于作业人员进行错误定位及复核。

3 面要素接边检查算法实现

根据上述算法描述,利用ArcGIS Engine相关组件,在Visual Studio开发环境下进行面要素接边检查工具的实现。ArcGIS Engine是ESRI公司推出的可用于构建定制应用的一个完整的嵌入式的GIS组件库,具有简洁、灵活、易用、可移植性强等优点,其中有3 000多个对象可供开发人员调用,为开发人员集成了大量的GIS功能,可以针对GIS解决方案快速搭建应用平台[11-12]。CJHJ是一种被广泛使用的面向对象的编程语言,易于学习和使用[13],可在ArcGIS Engine开发中用作编程语言。因此,基于ArcGIS Engine二次开发平台在Visual Studio2010编程环境下使用CJHJ编程语言可以较好地实现面要素接边检查工具。

面要素接边检查工具在开发过程使用IWorkspace、IFeatureClass、IFeature、IGeometry、IField、IPointCollection、IRelationalOperator、ITopologicalOperator等相关组件[14],其中IWorkspace组件用于连接一个或多个数据集的数据库或数据文件;IFeatureClass组件用于获取矢量数据中的具体要素图层;IFeature组件用于管理要素图层中的具体要素,并获取要素的相关信息(如空间几何信息和属性信息);IGeometry组件用于管理与获取要素的几何信息;IField组件用于管理与获取要素的属性字段信息;IPointCollection组件用于获取、删除、替换以及更新几何对象中的具体结点;IRelationalOperator组件用于判断两个要素间的空间关系(如是否相接、是否相离等);ITopologicalOperator组件用于要素空间几何对象的拓扑计算(如求缓冲区、求相交等)。按照图2所示的逻辑流程编写相关代码,编译形成可执行文件,完成工具的开发实现。

4 实例验证

将按照本文提出的算法实现的面要素接边检查工具应用于陕西省某区域的大比例尺居民地及植被数据的接边检查工作中。其接边检查结果示例如图6所示,接边检查结果统计与接边检查时间统计如表1、表2所示。

图6 接边检查结果示例

表1 接边检查结果

表2 接边检查时间统计

实践结果表明,该工具简单易用,利于作业人员上手,可以快速、准确地检查出数据中存在的接边问题,接边检查的正确率达到97%以上,同时生成的接边检查错误反馈结果可辅助进行数据复核与修改。对统计结果进行分析,存在的多检问题是因为一些面要素不满足无效接边过滤条件,存在的漏检问题是因为一些计算结果超出阈值(如设定长度比为0.95,漏检对象的长度比为0.942)。这些多检和漏检的问题可以通过调整阈值(如将接边过滤距离调小,将接边长度比率调低)的方式进行消除。由于接边检查的正确率较高,因此可以将后续的排查工作降低到10%以下,工具的使用极大减少人工操作,有效提升作业效率和作业质量。

5 结 论

矢量数据接边质量的好坏直接影响国家及各行业利用矢量数据进行分析、决策的正确性和可靠性[15]。本文针对一些大比例尺面要素数据在没有接边线的情况下无法有效进行接边检查的问题,在分析面要素接边原则和接边特点的基础上提出一种面要素接边检查算法,并对获取面要素接边线、相接要素几何检查、缓冲要素几何检查、属性检查、无效接边结果过滤、检查结果输出等关键环节进行详细阐述,同时利用ArcGIS Engine相关组件和Visual Studio开发环境进行算法实现,形成面要素接边检查工具,并将其应用于陕西省某些区域大比例尺居民地及植被数据的接边检查工作中,验证其合理性与实用性。实践结果表明,按照本文提出的算法所开发的工具可以快速、准确地查出数据中存在的接边问题,减少人工操作,有效提升作业效率,具有一定参考价值。

猜你喜欢

边线结点组件
海岸水边线提取方法在GF-2卫星影像中的适应性研究
无人机智能巡检在光伏电站组件诊断中的应用
基于八数码问题的搜索算法的研究
新型碎边剪刀盘组件
U盾外壳组件注塑模具设计
Ladyzhenskaya流体力学方程组的确定模与确定结点个数估计
认识足球(六)
突破矩形上边线买入法(1)
风起新一代光伏组件膜层:SSG纳米自清洁膜层
基于Raspberry PI为结点的天气云测量网络实现