单击标记群集默认情况下打开具有完全相同位置标记的蜘蛛

时间:2013-03-21 14:06:49

标签: markerclusterer

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

但是,我希望修改OMS的工作方式,这样当我点击其下有2分的群集时

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

当我点击时,我想要什么 群集,直接的方式它将打开蜘蛛与2个标记,已经 花了很多次但仍然没有用。

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

1。 我在添加到OMS(oms.addMarker)时可以跟踪标记,并且可以 点击取决于谷歌地图的zoom_changed事件,但它没有开火 spiderfy而不是它点击我们添加到标记的点击事件.....

2。 我看到一个事件蜘蛛侠,所以我试图用一个触发该事件 标记对象(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 ... });

1 个答案:

答案 0 :(得分:1)

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

我的解决方案非常简单。

  1. 我们捕获markerCluster的点击事件。
  2. 获取markerCluster的标记。
  3. 检查所有markerCluster标记是否位于相同位置。
  4. 如果它们处于相同位置,我们会触发点击事件,后者获得了markerCluster标记。
  5. 简而言之,这就是代码:

           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;
        }
    }