给出一个多边形细分S和一组点P,在S中为每个点(在二维空间中)找到最接近的线段。
在我的环境中,我有数十万个细分和几千个点。
检查每条线的每个点将花费很长时间。有没有有效的算法?
我当时正在考虑多种选择,但不知道哪个是最好的。
什么是解决此问题的好方法?
答案 0 :(得分:1)
Postgis的方法是使用带有自定义搜索算法的R树。当像常规查询一样沿着树下移时,它们会跟踪到树中遇到的边界区域中的对象的最小和最大距离。树的每个遇到的分支都将添加到“活动分支列表”( ABL )中,该列表使用距离度量标准进行修剪。
他们在 ABL 中选择分支的边界区域,然后递归应用算法。在叶子(像线段这样的对象)上,它更新变量 nearest 。从递归返回时,他们应用 nearest 变量对 ABL 进行更多的修剪,直到 ABL 为空为止。
理论上最坏的情况是每个查询都是线性的,但是在实践中却有更好的结果。