【问题标题】:Javascript - Programatically return near places by latidude and longitudeJavascript - 以编程方式按纬度和经度返回附近的地方
【发布时间】:2012-12-12 12:48:21
【问题描述】:

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

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

有没有算法/公式?

我正在使用OpenStreetMap 地理位置

谢谢。

【问题讨论】:

  • 我正在使用 openstreetmap 地理位置
  • 查看 openstreemap 地理定位 API 参考,您可能会在那里找到一些东西。

标签: javascript jquery localization geolocation openstreetmap


【解决方案1】:

您可以使用以下公式计算两个给定坐标之间的距离: (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 中执行此操作。您需要使用一些数学函数并遍历存储坐标的数组以检查距离。

【讨论】:

    【解决方案2】:

    我认为您可以使用此公式根据 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
                            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      相关资源
      最近更新 更多