算法/ MySQL - 获取半径内的所有点

时间:2015-02-25 18:45:52

标签: mysql algorithm

我有MySQL坐标表(经度和纬度)。

我想找到最有效的方法来获取特定半径内某个点周围的所有点。

换句话说, 输入:经度,纬度,半径(公里) 输出:此圈中的所有点(经度和纬度)

如何以最有效的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

遵循@ jean的想法,一种有效的方法是执行范围查询,然后过滤圆内的点,因为范围查询可以通过范围索引进行优化。设(x,y,r)为输入。即,

SELETE * FROM coordinates WHERE longitude <= x + r and longitude >= x - r and latitude <= y + r and latitude >= y - r

然后你可以将元组加载到内存并过滤结果yourseft,或者你对这个子查询的结果做另一个sql查询来过滤这些点。

遵循相同的想法,我们可以用更奇特的方式来做:我们可以将圆分解为多个矩形并对所有这些矩形执行范围查询,但我怀疑这可以提高多少性能。