Javascript 在谷歌地图中获取N个最靠近中心的标记

Javascript 在谷歌地图中获取N个最靠近中心的标记,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我正试图找出如何在Javascript中按距离地图中心的距离对Google地图上的前10个标记进行排序。假设我在一个数组中有100个标记,我想显示更多关于HTML无序列表中前10个最近标记的信息。我该怎么做呢? 我在Google Maps API第2版中找到了一个类似的示例,但在第3版中没有找到任何示例。无论发生什么情况,都需要计算所有距离。您可以自己用简单的方程式或使用Google的几何体库:及其函数:ComputedIstanceBeween()。然后将距离存储在自定义标记属性中,例如: m

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

无论发生什么情况,都需要计算所有距离。您可以自己用简单的方程式或使用Google的几何体库:及其函数:ComputedIstanceBeween()。然后将距离存储在自定义标记属性中,例如:

marker.distance = google.maps.geometry.spherical.computeDistanceBetween(marker.position, center.position);
你想怎么排序就怎么排序。 希望能有帮助

  • 根据与地图中心点的接近程度对阵列进行排序。使用
    sort()
  • 使用
    Slice()
    将前10个切片
  • 把这些画在地图上

  • 在StackOverflow上有一些类似的问题,但是没有一个真正展示了一个完整的例子,很容易阅读和理解,所以我把它们放在一起。这是使用lodash/下划线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函数遍历数组中的每个标记,并根据函数返回的值(即它的第二个参数)对列表进行排序。ComputedDistanceBetween函数返回一个数字,表示地图中心和标记位置之间的距离(以米为单位),这很容易排序。

    我就是这样做的。对于较小的比例尺,您可能会使用平面毕达哥尔距离表达式(纬度的平方差+经度的平方差),它不那么精确,但可能要快得多。谢谢,我在您的解决方案中使用了first answers中的函数!对于这种操作,我通常使用库。它对这种操作有很多帮助。在我的例子中,我在标记数组中使用了
    .each
    .sort