java - 在 MySQL 中快速检索带有 GPS 坐标的 SELECT 语句

标签 java mysql geolocation

我在 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 中尝试完成的任务: Geo/Spatial Search with MySQL

关于java - 在 MySQL 中快速检索带有 GPS 坐标的 SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7639021/

相关文章:

mysql - Node.js redis 发布订阅

javascript - Phonegap 构建地理定位不起作用

javascript - Android 上的 HTML 地理定位不提示

Java Crypto Api - 如何选择密码提供者

java - phonegap 相机 API 在 android 上重新启动应用程序

Mysql语法错误

php - 从数据库 CodeIgniter 获取数据时出错

php - 根据邮政编码自动填写国家和城市,反之

java - 如何让 ScrolledComposite 中包含 FlowLayout 的 Composite 垂直而不是水平增长?

java - 了解 Dagger2 流程(提供的示例)