-2

是否有可能获得附近的地方,提供纬度和经度?

例如,如果我想要提供的纬度、经度周围 50 公里范围内的地方,我该如何实现呢?

有没有算法/公式?

我正在使用OpenStreetMap地理位置

谢谢你。

4

2 回答 2

2

您可以使用以下公式计算两个给定坐标之间的距离:(lat1, lon1) 和 (lat2, lon2)

dist = arccos(sin(lat1) · sin(lat2) + cos(lat1) · cos(lat2) · cos(lon1 - lon2)) · R

参考:Great-circle_distance

现在假设您将所有这些坐标保存在数据库中,然后您可以运行查询以查找范围 50 公里内的所有位置。

SELECT * FROM Places WHERE acos(sin(1.3963) * sin(Lat) + cos(1.3963) * cos(Lat) * cos(Lon - (-0.6981))) * 6371 <= 50;

也可以在 Javascript 中执行此操作。您需要使用一些数学函数并遍历存储坐标的数组以检查距离。

于 2012-12-12T12:55:20.637 回答
1

我认为您可以使用此公式根据 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
                        });
于 2012-12-12T12:59:53.093 回答