MarkerClusterer在同一个地方有多个标记

时间:2013-12-10 09:32:39

标签: google-maps google-maps-api-3 markerclusterer

我正在使用MarkerClusterer。当我在完全相同的位置上有两个或更多标记时,API仅显示1个标记 - 最上面的一个。但不知何故,我想显示所有标记,因为每个标记将打开不同的弹出窗口。 我搜索了几个解决方案,但似乎没有一个解决方案 任何人都有类似的问题,并会分享一个解决方案??

3 个答案:

答案 0 :(得分:25)

终于搞定了。这适用于所有尚未找到解决方案的人。下面的代码为相同位置的标记添加了偏移量:

createMarker函数中添加以下代码:

//get array of markers currently in cluster
var allMarkers = namespace.mapParams.mapMarkersArray;

//final position for marker, could be updated if another marker already exists in same position
var finalLatLng = latlng;

//check to see if any of the existing markers match the latlng of the new marker
if (allMarkers.length != 0) {
    for (i=0; i < allMarkers.length; i++) {
        var existingMarker = allMarkers[i];
        var pos = existingMarker.getPosition();

        //if a marker already exists in the same position as this marker
        if (latlng.equals(pos)) {
            //update the position of the coincident marker by applying a small multipler to its coordinates
            var newLat = latlng.lat() + (Math.random() -.5) / 1500;// * (Math.random() * (max - min) + min);
            var newLng = latlng.lng() + (Math.random() -.5) / 1500;// * (Math.random() * (max - min) + min);
            finalLatLng = new google.maps.LatLng(newLat,newLng);
        }
    }
}

Refer this

现在使用新的位置值google.maps.Marker更新每个标记的finalLatLng个对象。

var marker = new google.maps.Marker({
    map: msf_namespace.mapParams.resultmap,
    position: finalLatLng,
    title: name,
    icon: markericon
});

//add each generated marker to mapMarkersArray
namespace.mapParams.mapMarkersArray.push(marker);

答案 1 :(得分:1)

MarkerClusterer具有用于定义maxZoom的选项,该maxZoom最多可以定义在地图上可见的群集。您可以将其值设置为18,这样当用户放大到最大值时它不会显示群集:

 const markerCluster = new MarkerClusterer(map, markers,{maxZoom: 18});

答案 2 :(得分:0)

仅供参考-精度

decimal places  decimal degrees N/S or E/W at equator
2   0.01    1.1132 km
3   0.001   111.32 m
4   0.0001  11.132 m
5   0.00001 1.1132 m