在谷歌地图中找到最靠近中心的N个标记
Get N Markers that are closest to the center in Google Maps
我试图找出如何排序谷歌地图上的前10个标记从Javascript地图的中心的距离。假设我在一个数组中有100个标记,我想显示关于HTML无序列表中最接近的前10个标记的更多信息。我该怎么做呢?我在这里找到了一个类似的例子,用于Google Maps API版本2,但没有用于版本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个。 - 将它们绘制在地图上。
在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函数返回一个数字,表示地图中心和标记位置之间的距离(以米为单位),这很容易排序。
相关文章:
- 谷歌地图固定位置覆盖
- 如果同一页面上有多个谷歌地图,单击任何标记都会突出显示最底部的地图标记
- 世界的最大纬度和长边界 - 谷歌地图API LatLngBounds().
- angularjs超过最大缩放后的谷歌地图缩放地图
- 修改谷歌地图类型的最大缩放级别
- 谷歌地图显示什么,直到我最小化屏幕
- 在lat和long谷歌地图中的最大长度
- 谷歌地图API最快路线
- RangeError:超过了最大调用堆栈大小-谷歌地图Api
- 在谷歌地图中找到最靠近中心的N个标记
- 谷歌地图的最大边界是否与最大纬度不一致?
- 谷歌地图API v3 -显示所有可见的标记与最大缩放
- 最好和最简单的方法传递地图坐标到谷歌地图
- 如何找到最小值&最大值纬度和经度在谷歌地图上
- 未捕获的RangeError:当我使用谷歌地图时,超过了最大调用堆栈大小
- 谷歌地图最大标记
- 我如何确定谷歌地图的最大缩放级别整数
- 如何在谷歌地图上获得两个形状之间的最短距离,使用JavaScript
- 谷歌地图v3 API - 当鼠标靠近边界框时如何平移地图
- 谷歌地图API自定义地图类型允许边界的最大调用堆栈大小超过/太多递归