fast retrieval of SELECT statement with GPS coordinates in MySQL

笑着哭i 提交于 2020-01-03 04:52:11

问题


I have a table in MySQL db which two of it's columns are the latitude and the longitude of a given geo-point. it's defined as Float(2,6). I want to select only the records within a specific radius from a given point.

I found the following code in Java, that checks the distance between to geo-points:

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;
   }

Currently, I'm doing SELECT without the location, and then I go over the result set and checks if it's in the radius given. (in Java). This is surely not the most elegant, efficient way of doing it. Can you think of a better way ?


回答1:


Here's a presentation that describes (I think) how to do what you're attempting to accomplish in MySQL: Geo/Spatial Search with MySQL



来源:https://stackoverflow.com/questions/7639021/fast-retrieval-of-select-statement-with-gps-coordinates-in-mysql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!