Google 地图不提供拆分位于同一位置的多个标记的方法。这可能发生在多个居住地点(例如公寓楼或专业服务大楼)的人员或企业中。根据缩放级别,它也可能发生在购物中心等。
解决方法是“蜘蛛化”它们:单击第一个时,它会用一条线将它们分开到该位置。这是在 Google Earth 中完成的,George MacKerron 为 Google Maps 编写了一个包。(https://github.com/jawj/OverlappingMarkerSpiderfier)
它可以与markerclusterer集成,虽然它不支持marker clusterer的批量创建marker。
我的问题是我正在处理的应用程序想要为不同类型的活动提供特定的图标。Spiderfier 将其中一个标记放在顶部。查看地图的人无法知道顶部标记下方可能有 10 个或更多其他标记。
理想情况下,有一种方法可以放置一个顶部标记,当有多个标记类似于 markercluster 中的不同图标时显示。这不是直接的 1 对 1,因为 Spiderfier 也可以在它们靠近但不完全相同的位置(默认为 20 像素)时工作,并且 markercluster 没有提供在完全相同的位置访问多个标记的规定。
理想的行为是有一个特殊的蜘蛛图标,当点击时会闯入蜘蛛化的单个图标。类似于markerclusterer,但没有缩放变化和处理相同的位置。理想情况下,特殊图标将指示现场有多少其他标记,再次像markerclusterer。特殊图标可以隐藏或成为蜘蛛组的一部分。
如果没有一些住宿,用户将无法知道该地点有多项活动。他们甚至可能假设他们想要的活动不在那个位置,因为显示了另一个活动标记。
这是一个有问题的 plunker:http ://plnkr.co/edit/vimZNq?p=info
var markers = [];
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < 100; ++i) {
var latLng = new google.maps.LatLng(Math.floor(Math.random() * 10) / 10 + 39,
Math.floor(Math.random() * 10) / 10 - 100);
var marker = new google.maps.Marker({
position: latLng,
title: "marker " + i + " pos: " + latLng,
maxZoom: 8,
map: map
});
marker.desc = marker.getTitle();
bounds.extend(latLng);
markers.push(marker);
oms.addMarker(marker);
}
map.fitBounds(bounds);
var markerCluster = new MarkerClusterer(map, markers);
谢谢你的帮助,
大卫