【发布时间】:2011-12-02 07:16:58
【问题描述】:
我试图弄清楚如何在 Javascript 中按距地图中心的距离对 Google 地图上的前 10 个标记进行排序。因此,假设我在一个数组中有 100 个标记,并且我想在 HTML 无序列表中显示有关前 10 个最接近标记的更多信息。我该怎么做呢? 我找到了 Google Maps API 版本 2 here 的类似示例,但版本 3 没有。
【问题讨论】:
标签: javascript google-maps-api-3
我试图弄清楚如何在 Javascript 中按距地图中心的距离对 Google 地图上的前 10 个标记进行排序。因此,假设我在一个数组中有 100 个标记,并且我想在 HTML 无序列表中显示有关前 10 个最接近标记的更多信息。我该怎么做呢? 我找到了 Google Maps API 版本 2 here 的类似示例,但版本 3 没有。
【问题讨论】:
标签: javascript google-maps-api-3
无论发生什么,您都需要计算所有距离。您可以自己使用简单的方程式或使用 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);
并根据需要对其进行排序。 希望对您有所帮助。
【讨论】:
sort()。slice()分割前10个。【讨论】:
_.each 和_.sort。
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 函数返回一个数字,表示地图中心和标记位置之间的距离,以米为单位,便于排序。
【讨论】: