基于ArcEngine的图幅批量自动接边检查工具实现

2023-09-06 01:05胡菲菲李小梅
资源导刊(信息化测绘) 2023年7期
关键词:图幅边线缓冲区

胡菲菲 李小梅

(广东省国土资源测绘院,广东 广州 510500)

1 引言

测绘地理信息数据生产过程中通常采用分块或分幅的作业模式,由于各类地理要素的属性项较多、数据结构复杂,在分幅采集过程中极易造成地理目标实体被分割,且在图幅边沿产生空间错位等问题[1],因此,汇交成果前需将所有数据层要素进行图幅的理论图廓线相接,然后按规定进行图幅之间的接边,保证跨图幅要素几何位置的连续与属性逻辑的一致性[2]。图幅接边检查工作通常采用人工方式,不仅费时费力,效率低下,还难以保证接边精度,遗漏问题也相对较多。而现有的接边程序只能在两个覆盖面之间进行,且接边时只考虑图形约束条件,忽略了属性约束条件[3]。针对以上问题,本文设计了图幅自动接边算法,基于ArcEngine 实现了图幅批量自动接边工具,提高了接边检查的准确性和效率,具有一定的实用价值。

2 ArcEngine 二次开发技术

ArcEngine 是一套用于构建定制应用的完整的嵌入式GIS 组件库,建立在ArcObjects 之上,ArcObjects 是整个ArcGIS 软件的核心功能库[4]。ArcEngine 通过对底层的算法进行封装,提供了强大的空间查询、空间分析功能等类库,支持面向对象的形式进行开发。因此,基于ArcEngine 对空间数据操作的优势和程序开发的灵活性,本文采用该技术开发接边检查工具。

3 数据库结构

3.1 图幅目录组织

基础测绘数据以.mdb 格式存储,所有图幅的数据库均以图幅号命名,并存储在一个文件夹下。

3.2 图层结构定义

基础测绘中要素主要分为定位基础、水系、居民地及设施、交通、管线、境界与政区、地貌、植被与土质等几大类[5],具体又分为23 个图层,图层结构定义如表1 所示。

表1 图层结构定义

4 整体设计思路

4.1 接边检查内容及原则

接边检查是检查相邻图幅中同一要素在共同边界处的几何位置以及属性内容的一致性。具体包括:相接要素的位置是否连续,要素是否遗漏;相接要素在各自所属数据中所有的属性内容是否相同[6]。

4.1.1 几何图形方面

(1)点状地物无需检查接边;

(2)线状地物在接边线附近的端点应与邻接图幅线状地物的端点距离在预定阈值内,且与接边线咬合;

(3)面状地物在接边线附近的边的两端点应与邻接图幅面状地物的边在预定阈值内重合,且与接边线咬合。

4.1.2 属性方面

相邻图幅接边的两个地物要素属性应确保一致。

4.2 总体思路

依次遍历所有图幅,对每一个图幅进行接边时,分别计算出东南西北四个方向的邻接图幅号,循环分别与四个方向邻接图幅进行接边检查,并对当前方向上两侧图幅的每个要素图层进行接边检查,总体技术流程如图1 所示。

图1 总体技术流程

5 程序设计及实现

系统采用C# 语言WINFORM 框架,基于ArcGIS 10.2 平台和.net framework 4.0 开发。

5.1 接边图幅的查找

根据当前图幅的图号,依次计算东南西北四个方向邻接图幅的图幅号。根据计算得到的邻接图幅的图幅号,依次查找邻接图幅数据库,分别进行接边操作。

5.2 接边要素查找

由于数据库存储的要素较多,没有必要对所有要素都进行接边检查,在接边时只需检查接边线附近的要素,而远离接边线的要素则可以忽略。因此,为提高检查效率,减少不必要的开销,本文利用接边线生成缓冲区,通过缓冲区获取所有与之相交的要素。

5.2.1 生成缓冲区

通过调用ITopologicalOperator 接口的Buffer方法,可以按照一定距离对图廓边线生成缓冲区。

ITopologicalOperator topolOperator = geo as ITopologicalOperator;

IGeometry bufferGeometry = topolOperator.Buffer(dis);

5.2.2 获取与缓冲区相交的所有要素

本文通过ArcGIS 提供的ISpatialFilter 接口的空间查询功能来获取与缓冲区相交的所有要素。ISpatialFilter 接口包含空间和属性限制,可对要素类中的要素按设定条件进行过滤,最后获取所需要素。使用Spatial Filter 执行空间查询时,需用到Geometry、GeometryField 和SpatialRel 属性。Geometry是源图形,根据与该图形的空间关系执行选择。GeometryField 是图形字段名,将其中的图形与源图形比较。SpatialRel 属性将一个esriSpatialRelEnum传入来指定空间关系,由于此处需用到空间相交,所以枚举类型变量为esriSpatialRelIntersects。最后将接边两侧图幅中与缓冲区相交的所有要素分别存储到对应的要素集合,在执行接边检查时只需检查两个集合中的要素。与缓冲区相交的要素选取如图2 所示。

图2 选取与缓冲区相交的要素

5.3 几何接边

从所有要素图层的几何特征来看,可以将图层大致分为点、线、面三类,由于点类型不存在接边问题,因此自动接边只需要考虑线和面图层。

5.3.1 线要素接边

在检查线要素接边时,由于线要素的几何图形为多段线,因此只需要对线要素的两个端点进行判断。首先依次遍历邻接图幅的要素集合中所有的线要素,并计算接边两侧线要素的端点距离,如果此距离小于设定的阈值,则代表两个要素为接边要素[7],同时需要检查接边的当前端点与接边线是否咬合,如果是,则代表两个要素能够在接边线上几何接边,否则代表不接边,需要添加到错误检查记录;如果查找不到两个端点距离小于阈值的对应接边要素,则代表当前要素可能存在接边错误,同样添加到错误检查记录,3种情况如图3 所示。

图3 线要素接边检查情况

获取多段线的端点可以通过IPolyline 接口调用FromPoint 和ToPoint 两个变量,分别为多段线的起点和终点。在计算端点距离时,ArcGIS 提供了IProximityOperator 接口,主要用于获取两个几何图形的距离,以及给定一个Point,求另一个几何图形上离给定点最近的点[8],本文使用了ReturnDistance方法,用于返回两个端点间的距离。

5.3.2 面要素接边

在检查面要素接边时,由于面可以转为多段线,而面的每一条边均为线段,因此只需要依次对面上的每一条边与邻接图幅要素集合中所有面要素的每一条边进行匹配。具体流程如下:首先判断当前边的两个端点是否在接边线附近,如果不在,则开始下一条边的判断;如果在接边线附近,则在邻接图幅的要素集合中查找能够与之几何匹配的面要素,如果当前边与邻接图幅面要素的边只有一个端点距离小于设定阈值,那么代表两个面要素的这两条边不接边,需要添加到错误检查记录;如果两个端点距离均小于设定阈值,并且两个端点能够与接边线咬合,那么代表这两条边能够在接边线上几何接边,否则代表当前要素可能存在接边错误,需要添加到错误检查记录。重复以上过程,直至所有边均遍历完成,如果当前面要素没有一条边接边,则代表当前要素可能存在接边错误,需要添加到错误检查记录,3 种情况如图4 所示。

图4 面要素接边检查情况

为了获取面要素上的所有边,可以将面图形转为Segment 对象集合,通过ISegmentCollection 接口遍历获取每一个元素,然后将当前元素转为线类型。

5.4 属性匹配

在几何图形接边检查完成后,还需检查属性是否匹配。由于每个要素图层的属性字段各不相同,因此考虑到开发工作量,提高灵活度,采用顺序遍历属性字段依次进行属性值比对,OBJECTID、SHAPE、SHAPE_Length、SHAPE_Area 等几个固定字段除外。如果任意一项属性字段的属性值不一致则记录到检查结果中。

5.5 系统运行效果

本文利用基础测绘数据对系统功能进行测试。首先设置图幅数据库的存储路径,将所有图幅数据库批量导入,检查后会分别生成线要素和面要素接边检查结果,线要素接边检查结果为点类型,用于显示线不接边的端点具体位置,而面要素接边检查结果为线类型,用于显示面不接边的边线所在位置,接边检查结果如图5 和图6 所示。

图5 线要素接边检查结果

图6 面要素接边检查结果

6 结束语

本文研究了测绘地理信息数据图幅接边检查算法,基于ArcEngine 开发了图幅批量自动接边检查工具,工具功能紧贴实际,省去了人工接边的繁重劳动,提高了接边检查的自动化水平,减少了接边差错和遗漏现象,下一步将针对复杂图形进一步优化接边算法。

猜你喜欢
图幅边线缓冲区
海岸水边线提取方法在GF-2卫星影像中的适应性研究
嫩江重要省界缓冲区水质单因子评价法研究
认识足球(六)
突破矩形上边线买入法(1)
基于EXCEL的地形图图幅号转换查询方法
关键链技术缓冲区的确定方法研究
基于ArcMap的图幅接合表快速生成方法研究
地形图图幅编号规则及实现
基于Bing Maps的地形图图幅编号的网络可视化查询
地理信息系统绘图缓冲区技术设计与实现