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

算法/MySQL-获取半径内的所有点,mysql,algorithm,Mysql,Algorithm,我有MySQL的经纬度坐标表 我想找到一种最有效的方法来获取特定半径内某个点周围的所有点 换句话说,, 输入:经度、纬度、半径(公里) 输出:此圆中的所有经纬度点 如何以最有效的方式执行此操作?根据@jean的想法,一种有效的方法是执行范围查询,然后过滤圆内的点,因为范围查询可以通过范围索引进行优化。设x,y,r为输入。即 SELETE * FROM coordinates WHERE longitude <= x + r and longitude >= x - r and lat

我有MySQL的经纬度坐标表

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

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


如何以最有效的方式执行此操作?

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

SELETE * FROM coordinates WHERE longitude <= x + r and longitude >= x - r and latitude <= y + r and latitude >= y - r
然后,您可以将元组加载到内存并过滤您的seft结果,或者对该子查询的结果执行另一个sql查询以过滤点


按照同样的想法,我们可以用一种更奇特的方法来实现:我们可以将圆分解为多个矩形,并对所有这些矩形执行范围查询,但我怀疑这能在多大程度上提高性能。

这可能会帮助您最有效的方法是不精确地找到一个正方形而不是一个圆形,这样,您不需要计算平方根,只需使用简单的范围值即可