使用MySQL中的GPS坐标快速检索SELECT语句

我在MySQL数据库中有一个表,其中两列是给定地理点的纬度和经度。 它被定义为Float(2,6)。 我想只从给定点中选择特定半径内的记录。

我在Java中找到了以下代码,用于检查地理点之间的距离:

public class Location { private int latitudeE6; private int longitudeE6; ... } public static double CalculateDistance(Location StartP, Location EndP) { double lat1 = StartP.getLatitudeE6()/1E6; double lat2 = EndP.getLatitudeE6()/1E6; double lon1 = StartP.getLongitudeE6()/1E6; double lon2 = EndP.getLongitudeE6()/1E6; double dLat = Math.toRadians(lat2-lat1); double dLon = Math.toRadians(lon2-lon1); double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon/2) * Math.sin(dLon/2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); return earthradius * c; } 

目前,我正在做SELECT而没有位置,然后我查看结果集并检查它是否在给定的半径内。 (在Java中)。 这肯定不是最优雅,最有效的方式。 你能想到一个更好的方法吗?

这是一个演示文稿,描述(我认为)如何做你在MySQL中试图完成的事情: 使用MySQL进行地理/空间搜索