Google地图在地图上获得10个最接近的所有标记点

时间:2011-12-02 07:16:59

标签: javascript google-maps-api-3

我尝试从谷歌地图的中心获取10个最接近的标记,并在Javascript中根据距离对中心进行排序。所以,假设我在Javascript数组中有100个标记 - 我想在html无序列表中显示关于10个特征的更多信息。 我找到了api版本2(example in version 2)的类似示例,但没有版本3 google map api。

3 个答案:

答案 0 :(得分:16)

无论发生什么,您都需要计算所有距离。您可以使用简单的公式自行完成,也可以使用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);

并按照你想要的方式对其进行排序。 希望它有所帮助。

答案 1 :(得分:0)

  1. 按照地图中心点附近的距离对数组进行排序。使用sort()
  2. 使用slice()切割前10个。
  3. 在地图上绘制这些。

答案 2 :(得分:0)

在 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 函数返回一个数字,表示地图中心和标记位置之间的距离(以米为单位),便于排序。