空间封闭路径/线段的合并算法 [英] Algorithm for merging spatially close paths / line segments

查看:28
本文介绍了空间封闭路径/线段的合并算法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一种用于街道地图制图综合的几何算法。

在我的地图数据中,我有许多路径(有序的点列表,由线段连接)彼此靠近且几乎平行。如何(1)识别这些"相邻路径ˮ"(即如何查找比某个阈值更近的路径)和(2)将它们合并为一条路径(即如何计算闭合路径之间的中心线)?

作为示例,请考虑以下使用OpenStreetMaps中的数据创建的道路/车道图:

如您所见,水平运行的道路的两条车道被建模为两条独立的路径。对于局部视图,这很有用,但对于更缩小的视图,我需要合并两条路径(车道),以便仅显示道路的一条线。

地图渲染器中用于实现此目的的既定算法是什么?显然,谷歌地图、OSM等都是这样做的--如何做到这一点?

推荐答案

我作为研究人员曾经研究过类似的问题。my paper on frequent route这是关于给定一系列轨迹(在不同的时间/速度),如何对路段进行反向工程。

您可以使用Frechet Distance测量线段之间的距离,并使用该距离对线段进行聚类。对于每个簇,您可以指定一个代表性的线段。这就是解决方案的要点。

更简单的实现方式是使用以下算法:

def reduce_segments (G : graph):
    for e in G.edges: 
        if not e.mark: 
            continue
        similar_edges = get_all_edge_with_frechet_distance_less_than_thr(G.edges, thr)
        for se in similar_edges:
            se.mark = True
    return {ee : ee in G.edges and ee.mark == False}

这篇关于空间封闭路径/线段的合并算法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆