При нажатии на кластер маркеров по умолчанию открывается паук с точно такими же маркерами местоположения.

Я пытался реализовать MarkerCluster (MS) с перекрывающимся кластером маркеров (OMS). Кажется, все работает нормально.

Тем не менее, я хочу изменить способ работы OMS, чтобы, если я нажму на кластер с двумя точками под ним

Когда я нажимаю на любой кластер с 2 точками в нем с точно таким же географическим местоположением, он открывает маркер, а когда я нажимаю на этот маркер, он открывает паука с 2 маркерами.

То, что я хочу, когда я нажимаю на кластер, сразу же открывает паука с 2 маркерами, уже потратил много раз, но все равно ничего не сработало.

Я уже пробовал много решений, например

1. Я могу отслеживать маркер, когда я добавляю в OMS (oms.addMarker), и могу щелкнуть в зависимости от события zoom_changed на карте Google, но это не запуск 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 ... });


person Prosenjit Debnath    schedule 21.03.2013    source источник


Ответы (1)


Я мог бы решить эту проблему, во-первых, очевидно, что вы реализовали кластер маркеров маркеров перекрытия Xluster в своих картах Google.

Мое решение очень простое.

  1. Мы фиксируем событие click для 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;
    }
}
person allel    schedule 26.05.2015
comment
Я искал, как запустить OMS вместо MarkerClusterer, но этот способ мне не подходит. Кстати, вы можете просто вернуть cont==markers.length вместо условия if else - person Vale; 09.11.2016