比较数据库中坐标集的最佳算法

时间:2014-02-12 02:23:51

标签: sql algorithm gis spatial

我正在尝试查询指定位置的最近位置 我已经考虑过获得每个点与我所拥有的点之间的距离,但我认为这需要花费很多时间,可能是O(n ^ 2),有没有更好的方法

2 个答案:

答案 0 :(得分:0)

四元组缩小尺寸,类似于分形。例如,在Bing地图中,四元组也用于平铺。你可以试试我的php解决方案hilbert-curve @ phpclasses.org。它给出了希尔伯特曲线,但也给出了四键。但这不是一个精确的搜索。如果您想要优化搜索,您需要使用harvesine配方。您可以使用边界框来加速搜索。

答案 1 :(得分:-1)

使用K-D treequad-treeoct-tree。它们实际上并不太难实现,网上也有很好的例子。

这称为Nearest-Neighbor search,维基百科上有大量信息。

使用这些方法通常可以比O(n 2 )做得更好。

K-D树的基本轮廓是:

  1. 在X上对坐标进行排序,然后在中间选择值。这个 成为树的根节点。其他值左对分 右。

  2. 在左右子树上,对y中的坐标进行排序 选择中间的值,这成为了根 子树。

  3. 重复进一步的子树,确保拆分X,然后是Y,然后 X,然后Y.

  4. 查询树时,您可以像二元搜索树一样简单地查找树 根据数据的分割方式。最近的邻居将是您登陆的最后一个节点 或者它的父母(我想,已经有一段时间了。)

  5. 编辑:如果您正在寻找K近邻,当您搜索K-D树时,您将在矩形指定的范围内进行搜索。您可以以相同的方式搜索子树,但必须确保整个矩形在节点的左侧,右侧,上方或下方(基于您的拆分方式)。如果矩形中包含节点,则递归其子树。原则上你仍然可以使用这种方法比O(n 2 )更好。