【问题标题】:Get N Markers that are closest to the center in Google Maps在谷歌地图中获取离中心最近的 N 个标记
【发布时间】:2011-12-02 07:16:58
【问题描述】:

我试图弄清楚如何在 Javascript 中按距地图中心的距离对 Google 地图上的前 10 个标记进行排序。因此,假设我在一个数组中有 100 个标记,并且我想在 HTML 无序列表中显示有关前 10 个最接近标记的更多信息。我该怎么做呢? 我找到了 Google Maps API 版本 2 here 的类似示例,但版本 3 没有。

【问题讨论】:

    标签: javascript google-maps-api-3


    【解决方案1】:

    无论发生什么,您都需要计算所有距离。您可以自己使用简单的方程式或使用 Google 的几何库:http://code.google.com/intl/pl-PL/apis/maps/documentation/javascript/geometry.html 及其函数:computeDistanceBetween()。然后将距离存储在自定义标记属性中,例如:

    marker.distance = google.maps.geometry.spherical.computeDistanceBetween(marker.position, center.position);
    

    并根据需要对其进行排序。 希望对您有所帮助。

    【讨论】:

    • 我就是这样做的。对于较小的比例,您可能可以使用平面毕达哥表达式来表示距离(纬度的平方差 + 经度的平方差),它不是那么精确,但可能要快得多。
    【解决方案2】:
    1. 按与地图中心点的接近程度对数组进行排序。使用sort()
    2. slice()分割前​​10个。
    3. 在地图上标出这些。

    【讨论】:

    • 谢谢,我在您的解决方案中使用了第一个答案中的功能!
    • 对于这种操作我通常使用underscore库。它对这种操作有很多帮助。就我而言,我在标记数组上使用了_.each_.sort
    【解决方案3】:

    StackOverflow 上有几个这样的问题,但没有一个真正展示了一个易于阅读和理解的完整示例,所以我将一个放在一起。这是使用 lodash/underscore sortBy 函数进行排序。

    const map = new google.maps.Map('#map', { center: { lat: 47.6541773, lng: -122.3500004 } });
    const markers = [
      new google.maps.Marker({ position: { lat: 47.6485476, lng: -122.3471675 }, map }),
      new google.maps.Marker({ position: { lat: 47.6606304, lng: -122.3651889 }, map })
      // ...
    ];
    const sortedMarkers = _.sortBy(markers, marker => {
      google.maps.geometry.spherical.computeDistanceBetween(
        marker.position,
        map.getCenter()
      )
    });
    const firstTenSortedMarkers = sortedMarkers.slice(10);
    

    sortBy 函数遍历数组中的每个标记,并根据作为第二个参数的函数返回的值对列表进行排序。 computeDistanceBetween 函数返回一个数字,表示地图中心和标记位置之间的距离,以米为单位,便于排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2019-05-08
      • 1970-01-01
      相关资源
      最近更新 更多