我目前正在使用此查询通过提供坐标在我的数据库中获取一个城镇:
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/