我有MySQL坐标表(经度和纬度)。
我想找到最有效的方法来获取特定半径内某个点周围的所有点。
换句话说, 输入:经度,纬度,半径(公里) 输出:此圈中的所有点(经度和纬度)
如何以最有效的方式做到这一点?
答案 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查询来过滤这些点。
遵循相同的想法,我们可以用更奇特的方式来做:我们可以将圆分解为多个矩形并对所有这些矩形执行范围查询,但我怀疑这可以提高多少性能。