Java MySQL中利用GPS坐标快速检索SELECT语句

Java MySQL中利用GPS坐标快速检索SELECT语句,java,mysql,geolocation,Java,Mysql,Geolocation,我在MySQL数据库中有一个表,其中两列是给定地理点的纬度和经度。它被定义为Float(2,6)。 我只想从给定点选择特定半径内的记录 我在Java中找到了以下代码,用于检查到地理点之间的距离: public class Location { private int latitudeE6; private int longitudeE6; ... } public static double CalculateDistance(Location StartP, Location En

我在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;
   }
目前,我正在做没有位置的选择,然后我检查结果集并检查它是否在给定的半径内。(爪哇语)。 这肯定不是最优雅、最有效的方式。
你能想出更好的办法吗

这里有一个演示文稿,它描述了(我认为)如何在MySQL中实现您想要实现的目标:

这里有一个演示文稿,它描述(我认为)如何在MySQL中实现您想要实现的目标:

MySQL内置了sin/cos/radian数学函数。您可以轻松地将计算函数转换为SQL语法,以便在WHERE子句中使用。或者更好的是,您可以将计算指定为一个用户定义的函数,以便在多个查询中重用。如果您对GIS感兴趣,您应该查看postGreSQL,它对GIS有更好的支持,并且可以基于函数进行索引。MySQL内置了sin/cos/radian数学函数。您可以轻松地将计算函数转换为SQL语法,以便在WHERE子句中使用。或者更好的是,您可以将计算指定为用户定义的函数,以便在多个查询中重复使用。如果您对GIS感兴趣,您应该查看postGreSQL,它对GIS有更好的支持,并且可以基于函数进行索引。