高效算法来找到每个点的最接近线段

时间:2018-09-20 10:32:29

标签: computational-geometry nearest-neighbor

给出一个多边形细分S和一组点P,在S中为每个点(在二维空间中)找到最接近的线段。
在我的环境中,我有数十万个细分和几千个点。

检查每条线的每个点将花费很长时间。有没有有效的算法?

我当时正在考虑多种选择,但不知道哪个是最好的。

  1. 构建梯形图并查询每个点所在的人脸。然后越过人脸的边缘(在细分中)以找到最近的线。
  2. 构建范围树或段树。查询围绕该点的框,并在其中找到最接近的线段。框中必须有一个细分,这样才能找到任何东西。
  3. 构建线段voronoi图。每张脸都描述最近的线段,但是我不知道如何进行点查询,因为边缘可能是抛物线弧。

什么是解决此问题的好方法?

1 个答案:

答案 0 :(得分:1)

Nearest Neighbor in Postgis

Postgis的方法是使用带有自定义搜索算法的R树。当像常规查询一样沿着树下移时,它​​们会跟踪到树中遇到的边界区域中的对象的最小和最大距离。树的每个遇到的分支都将添加到“活动分支列表”( ABL )中,该列表使用距离度量标准进行修剪。

他们在 ABL 中选择分支的边界区域,然后递归应用算法。在叶子(像线段这样的对象)上,它更新变量 nearest 。从递归返回时,他们应用 nearest 变量对 ABL 进行更多的修剪,直到 ABL 为空为止。

理论上最坏的情况是每个查询都是线性的,但是在实践中却有更好的结果。