3

我试图用重叠标记集群(OMS)实现 MarkerCluster(MS)。一切似乎都很好。

但是,我希望修改 OMS 的工作方式,以便如果我单击一个在其下有 2 个点的集群

当我单击任何具有完全相同地理位置的 2 个点的集群时,它会打开一个标记,当我单击该标记时,它会打开带有 2 个标记的蜘蛛。

当我点击集群时我想要什么,直接打开带有 2 个标记的蜘蛛,已经花了很多时间,但仍然没有任何效果。

我已经尝试了很多解决方案,比如

1.当我添加到OMS(oms.addMarker)时,我可以跟踪标记,并且可以根据谷歌地图的zoom_changed事件点击,但它不会触发spiderfy,而是触发我们添加到标记的点击事件...... .

2. 我看到了一个事件 spiderfy,所以我尝试使用标记对象 (oms.trigger('spiderfy', marker);) 触发该事件,但没有任何效果......

在这里,我也添加了代码片段:

mc = new MarkerClusterer(map, markers.locations, mcOptions); google.maps.event.addListener(mc, 'clusterclick', function(cluster) { 在此处输入代码clusterClicked = true; // HERE WE WANTS TO FIRE SPIDER FUNCTIONALITY ... });

4

1 回答 1

1

我可以解决这个问题,首先很明显你已经在你的谷歌地图中实现并重叠 Xluster Marker Marker Cluster。

我的解决方案非常简单。

  1. 我们捕获markerCluster 的点击事件。
  2. 获取markerCluster的标记。
  3. 检查所有 markerCluster 标记是否在同一位置。
  4. 如果它们在同一位置,我们会触发点击事件,后者会获得 markerCluster 标记。

简而言之,这是代码:

       var markerClusterer = new MarkerClusterer(map, allMarkers, {styles: styles[0], clusterClass: 'poiCluster', maxZoom:18}); 
       google.maps.event.addListener(markerClusterer, 'click', function(cluster) {

        var markers = cluster.getMarkers();

        if(estanTodosEnLaMismaPosicion(markers)){
             //to wait for map update
            setTimeout(function(){
                google.maps.event.trigger(markers[markers.length-1], 'click');
            },1000)
        }



        return true;
    });




    function estanTodosEnLaMismaPosicion(markers){
    var cont=0;
    var latitudMaster=markers[0].getPosition().lat();
    var longitudMaster=markers[0].getPosition().lng();
    for(var i=0;i<markers.length;i++){
        if(markers[i].getPosition().lat() === latitudMaster & markers[i].getPosition().lng() === longitudMaster ){
            cont++;
        }else{
            return false;
        }
    }
    if(cont==markers.length){
        return true;
    }else if(cont<markers.length){
        return false;
    }
}
于 2015-05-26T08:55:40.587 回答