Google Map Marker Cluster - PullRequest
       4

Google Map Marker Cluster

2 голосов
/ 22 декабря 2011

У меня проблема с кластеризацией маркеров на карте Google. Я использую api v3, но по некоторым причинам, которые я не могу выяснить, я не могу применить кластеризацию маркеров. Буду благодарен за любую помощь и предложения.

Функция нанесения маркеров выглядит следующим образом вместе с кодом кластера:

function setupOfficeMarkers() {
    mgr.clearMarkers();
    mgr.refresh();
    allmarkers.length = 0;
    document.getElementById('zomlevel').value = map.getZoom();
    document.getElementById('boundsmap').value = map.getCenter();
    // mapbound = map.getBounds();
    mapbound=new google.maps.LatLngBounds();

    for (var i in officeLayer) {
        if (officeLayer.hasOwnProperty(i)) {
            var layer = officeLayer[i];
            var markers = [];

            for (var j in layer["places"]) {
                if (layer["places"].hasOwnProperty(j)) {
                    if(map.getZoom()>=layer["zoom"][0] && map.getZoom()<=layer["zoom"][1]){ 
                    //displaying home icon on places starts here
                    var place = layer["places"][j];
                        if(place["icon"]){
                            if(place["icon"][0]){
                                if(place["icon"][0] == 'own'){
                                }else{
                                    var icon = getIcon(place["icon"]);
                                    }
                            }else{
                            var icon = getIcon(place["icon"]);
                                }
                        }else{
                            var icon = getIcon(place["icon"]);
                            }
            //displaying home icon on places ends here
            var title = place["name"];
            //alert(title);

            var posn = new google.maps.LatLng(place["posn"][0], place["posn"][1]);
            mapbound.extend(posn);

            if(map.getBounds().contains(posn)){
                if(place["icon"][0] == 'own'){
                    var imageUrl = place["icon"][1];
                    var markerImage = new google.maps.MarkerImage(imageUrl, new google.maps.Size(66, 65));
                    var marker = new google.maps.Marker({
                        position: posn,
                        draggable: false,
                        icon: markerImage
                    });
                        markers.push(50); 
                        //alert(markers.length);
                 }else{
                    var marker = createMarker(posn, title, getIcon(place["icon"]));
                 }

                  mgr.addMarker(marker, layer["zoom"][0], layer["zoom"][1]);
                  attachSecretMessageAjax(marker, place["name"],map);  
                  //attachSecretMessage(marker, '<h2>'+place["name"]+'</h2>',map);
              }
              //allmarkers.push(marker);
            }
        }
      }
      //mgr.addMarkers(markers, layer["zoom"][0], layer["zoom"][1]);

    }alert(markers.length+"OUTSIDE");
    var markerCluster = new MarkerClusterer(map, markers);
  }
 //alert(markers.length+"OUTSIDE");

  mgr.refresh();
  updateStatus(mgr.getMarkerCount(map.getZoom()));
}

1 Ответ

0 голосов
/ 20 января 2012

Я не уверен, но я думаю, что вы должны вызвать

markers.push(marker);

вместо

markers.push(50);

Поскольку MarkerClusterer требуется (1) карта и (2) маркерный массив.Надеюсь, это поможет.Вместо этого вы можете сначала вызвать конструкцию Marker Clusterer, а затем вызвать

markerCluster.addMarker(marker);

для каждого маркера.

...