Javascript 在谷歌地图中获取N个最靠近中心的标记
我正试图找出如何在Javascript中按距离地图中心的距离对Google地图上的前10个标记进行排序。假设我在一个数组中有100个标记,我想显示更多关于HTML无序列表中前10个最近标记的信息。我该怎么做呢?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
我在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
。