是否有可能获得附近的地方,提供纬度和经度?
例如,如果我想要提供的纬度、经度周围 50 公里范围内的地方,我该如何实现呢?
有没有算法/公式?
我正在使用OpenStreetMap地理位置
谢谢你。
您可以使用以下公式计算两个给定坐标之间的距离:(lat1, lon1) 和 (lat2, lon2)
dist = arccos(sin(lat1) · sin(lat2) + cos(lat1) · cos(lat2) · cos(lon1 - lon2)) · R
现在假设您将所有这些坐标保存在数据库中,然后您可以运行查询以查找范围 50 公里内的所有位置。
SELECT * FROM Places WHERE acos(sin(1.3963) * sin(Lat) + cos(1.3963) * cos(Lat) * cos(Lon - (-0.6981))) * 6371 <= 50;
也可以在 Javascript 中执行此操作。您需要使用一些数学函数并遍历存储坐标的数组以检查距离。
我认为您可以使用此公式根据 lat/lng 找到 2 点之间的距离。然后,您可以将其用于您的目的:
var kmBetween = function(a, b){
var e = Math, ra = e.PI/180;
var b = b.lat * ra, c = a.lat * ra, d = b - c;
var g = b.lng * ra - a.lng * ra;
var f = 2 * e.asin(e.sqrt(e.pow(e.sin(d/2), 2) + e.cos(b) * e.cos(c) * e.pow(e.sin(g/2), 2)));
return f * 6378.137;
}
var distance = kmBetween({
lat: 45.5,
lng: 33.4
},
{
lat: 44.3,
lng: 32.4
});