折线的空间连接

时间:2014-10-23 13:59:20

标签: performance algorithm indexing geometry

任务

给定 S | S | = N 的多线组执行基于距离的空间连接,连接折线与距离 d &lt; d <子>限制 的。两条多折线 L i L 之间的距离 d(i,j) j 定义为两点之间的最小距离 p v L i p w L <子> Ĵ

实施例

鉴于以下三条折线的集合,应加入 A B Example

简单解决方案

平凡的解决方案检查每个点 p k L s < / em> 如果任何其他点的距离 p m L < em> s 小于 d limit 并加入 L s 包含 p m 的多折线。

问题

对于大型 N ,简单的解决方案非常慢。

构建某种索引以加速空间连接。

问题

为此任务索引 S 的最佳方法是什么。

2 个答案:

答案 0 :(得分:1)

使用2-D tree可以加速固定半径近邻搜索。

对于每个节点,您将有效地找到距离 d limit 的所有其他节点,将搜索时间从O(N + K)减少到约O(Log(N)+ K)。

不幸的是,一旦你确定B应该加入A,你就无法从进一步的考虑中消除B,因为这将涉及从树中删除B的所有节点,这可能是一项代价高昂的操作。

另一种解决方案是通过网格化:在节点上覆盖方形网格,使每个图块包含其中的一些。

当您考虑某些折线时,从包含折线的切片开始并执行连续的扩张,直到超过 d limit 的大小。扩张中的瓷砖会告诉您其他节点是否足够接近。

更新:

您可以考虑使用Bresenham算法以适合的分辨率(像素大小= d limit )对地图进行光栅扫描,每条折线都有自己的颜色。您必须绘制2像素的线条粗细,因为相邻像素中的点将是近邻像素。报告所有颜色碰撞。

实际上,这是网格化方法的重新制定。如果您无法负担存储整个地图的费用,或者由于稀疏性而导致效率低下,您可以考虑将地图表示为四叉树。这会将空间换成查询时间。

答案 1 :(得分:0)

您可以尝试快速voronoi图表。使用多边形,您可以搜索最近的距离。当所有边缘遍历每个站点并计算到边缘中点的距离时。 vd单元将站点分成2个相等的一半。然后对距离进行排序。它应该给你所有的多边形以及最近的邻居。