mysql - 一个 SQL 查询来获取距离给定坐标一定距离内的所有城市?

标签 mysql sql math sqlite

我目前正在使用此查询通过提供坐标在我的数据库中获取一个城镇:

SELECT *
FROM citiesTable
WHERE latitude  >= ? AND latitude  <= ?
  AND longitude >= ? AND longitude <= ?;

此代码运行良好,是我想要的,但有时查询不匹配任何内容...... 所以,在这种情况下,我会在这个查询中加上鸟的距离,以便获得相邻的城镇。
关于我该怎么做的任何建议?

最佳答案

搜索“与经度和纬度的距​​离”给出了指向 http://www.movable-type.co.uk/scripts/latlong.html 的链接指定用于计算距离的代码:

var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();

var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;

再搜索几分钟,我们找到了 http://www.movable-type.co.uk/scripts/latlong-db.html

该页面充满了信息。这是一个简单(但效率低下)的解决方案,假设您的城镇位于 $lon,$lat 并且 $R 为 6371(即公里),最后您想要$rad 范围内的城市:

Select ID, Postcode, Lat, Lon, 
       acos(sin($lat)*sin(radians(Lat)) + cos($lat)*cos(radians(Lat))*cos(radians(Lon)-$lon))*$R As D
From MyTable 
Where acos(sin($lat)*sin(radians(Lat)) + cos($lat)*cos(radians(Lat))*cos(radians(Lon)-$lon))*$R < $rad

关于mysql - 一个 SQL 查询来获取距离给定坐标一定距离内的所有城市?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8571574/

相关文章:

mysql - 在 JOIN MAX(date) MYSQL 之后使用 MIN 值

php - SQL-如何将B表的多个id存储到A表中?

MySQL Group by 和 Having 子句问题

sql - Rails : How to get Model where "join_table.attrbute = x" joined, 还有所有其他

java - 矩阵数学代码错误

Mysql复杂查询

mysql - 外键约束失败

MySQL dump所有表的结构和部分数据

C++ Pi 估计程序无法正常工作

algorithm - 计算所有 n 位二进制字,以便在每次转动时打开或关闭一个位