我尝试从谷歌地图的中心获取10个最接近的标记,并在Javascript中根据距离对中心进行排序。所以,假设我在Javascript数组中有100个标记 - 我想在html无序列表中显示关于10个特征的更多信息。 我找到了api版本2(example in version 2)的类似示例,但没有版本3 google map api。
答案 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)
sort()
。slice()
切割前10个。答案 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 函数返回一个数字,表示地图中心和标记位置之间的距离(以米为单位),便于排序。