DLG数据线状道路自动闭合方法研究
2022-03-23方衎孙瑞敏黄一昀赵得意
方衎,孙瑞敏,黄一昀,赵得意
(江苏省工程勘测研究院有限责任公司)
1 引言
地形图数据入库是GIS工作者日常生产中最常见的一种任务,目前数据入库的工作主要是采用各种GIS软件[1-3],随着软件越来越成熟,数据入库的效率也变得越来越高。在入库过程中,很多要素需要进行构面处理[4],其中线状道路构面相对麻烦一些。一般通过手工先将路口闭合,再进行构面,或者通过二次开发进行构面。
2 常用的线状道路构面方法
手动跟踪构面。以双线道路为例,利用“track‐polygon”命令按顺序选择要参与构面的道路边线,选择完成后,即可完成构面(见图1a)。
利用“Boundary”命令构面。通常先在道路两头额外绘制两条多段线来封闭端口,然后利用“Bound‐ary”命令即可完成构面(见图1b)。
图1 常用的线状道路构面方法
以上两种方法,虽然数据质量得到保证,但工作效率不高。因此,为提高工作效率,本文提出一种基于近邻分析自动连接闭合线状道路的方法,并以此进行线状道路的构面。利用ArcGIS 平台以及Py‐thon 脚本实现了这一方法。实验结果表明,该方法取得了良好的效果,大大地提高了工作效率。
3 线状道路自动连接闭合的流程与方法
3.1 自动连接闭合构面的流程
首先,在自动连接之前,需对数据进行预处理,先将源数据格式为CAD 的转换成ArcGIS 软件下的shp 格式或者featureclass,再进行拓扑检查,消除一些拓扑错误(如悬挂点,伪节点等);预处理完后,即可进行线状道路自动连接闭合构面的工作,具体流程见图2。
图2 线状道路自动连接闭合构面流程图
3.2 自动连接闭合构面的方法
1)获取道路线首末两端点
由于线状道路构面的本质问题就是通过两条(或者以上)道路线端点的连接使其变成一条闭合线,然后通过闭合线来进行构面,因此,通过提取每条道路线的两端点(中间各折点则不需要提取),使之由一维线的研究转变成零维点的研究,从而简化了问题,提高了效率。
2)查找相同的端点
在实际情况中,由于道路的复杂性,往往一条完整的道路线会被分割成好几段,前一线段的末尾点就会和与之相连的线段的起始点重叠,这就导致提取的端点中存在重复点,通过提取每个点的坐标来判断点是否重复,从而提取出这些重复的端点。
3)删除重复的端点
查找出来的这些重复端点,对整条道路来说,其实并不是首末点,而是中间的各个折点,并不需要参与到后续的连接,因此,这些点作为中间数据需要将其删除,从而保证了每条道路线首末端点的唯一性。
4)端点配对(近邻分析)
将所有道路线的首尾两端点进行近邻分析,即在其他道路线的首尾端点中,获取与每条道路线端点距离最近的点,如图3 所示。以道路线AH 为例,在其他三条道路线BC、DE、FG 中,只有点B 距离端点A 最近,因此,端点A 所配对的点是B 点,其他配对点如AF、AG、AC 都不符合要求。同理,C 与D 配对,E与F配对,G与H配对。
图3 近邻分析法道路线端点配对
5)端点连接构面
端点配对好之后,互相配对的点连接构线,构好的线与之所在的道路线闭合形成封闭的面状图形,即完成构面。
4 线状道路自动连接闭合的实现
4.1 开发环境简述
Python 是一种不受局限、跨平台的开源编程语言,它功能强大,可嵌入,具有高度的可扩展性,适用于各种大中小型应用程序。Python 作为ArcGIS 的脚本语言,利用其以及附带的Arcpy站点包,能够开发出各种满足用户需求的工具和应用程序[5-6]。
4.2 相关技术的实现
1)道路线首末两端点的获取
利用FeatureVerticesToPoints 函数,在指定输出点的创建位置参数中选择“BOTH_ENDS”,表示只获取首末两端点,线段上其他的折点则不需要获取。
2)保证首末端点的唯一性
利用FindIdentical 函数,通过点的Point_X 和Point_Y 两个字段作为比较值,找出重复点,再利用DeleteIdentical 函数,删除这些重复点,从而保证了首末点的唯一性。
3)近邻分析
利用Near 函数,通过计算点与点的距离确定距离最近的点,为了防止部分不同属性的道路口距离过近导致配对错误,需要设置一个阈值,以提高配对的正确率,若搜索半径小于该阈值,则忽略不计。
4)点集转线
配对好的端点是一个点的集合,经过近邻分析后,互相配对的端点会产生一个共有的距离值字段,利用该字段值的唯一性以及PointsToLine函数,即可将配对的端点连接成线。连接好的线再和原道路线通过FeatureToPolygon函数完成最终的构面。
4.3 实例验证
为了验证上述方法的正确性和有效性,以扬州市邗江区的三块测区数据为例(结果如表1和图4所示)。该测区范围内共有城际公路、城市道路、乡村道路等142 条,其中完成正确构面的126 条,正确率为88.7%,验证了本文方法的可行性。
表1 自动构面结果测试表
图4 实例验证的结果
5 结语
本文提出的基于近邻分析来自动连接线状道路并构面的方法,简单高效,正确率较高,能够大幅减轻内业人员的工作量,提高他们的工作效率,且在其他交通要素(如双线桥梁)以及部分水系要素(如线状河流的构面)等同样适用,在实际的数据入库工作中得到了广泛应用,具有一定的实际意义。但本文的方法还可以进一步优化,在道路宽度阈值的设置上,本文每个数据源只设置一种固定值,其实可以更具有灵活性,例如,能够依据每种道路的等级属性自动的设置符合该等级的阈值,这样匹配的正确率会再次得到提高。因此,如何进一步提高正确率是本文接下来需要研究和解决的问题。