0

Мне удалось обновить карту, в соответствии с которой места (из моей БД) включены в текущую карту. Однако у меня есть некоторые проблемы для обновления кластеров. Я пытаюсь добавить markerClusterer.clearMarkers() после gmarkers [i] .setMap (null); но он не работает (даже маркеры больше не обновляются).Обновление MarkerClusterer

Вот код:

var map; 
var gmarkers = []; 

function initialize() { 
    var latlng = new google.maps.LatLng(46.7, 2.5); 
    var myOptions = { 
     zoom: 6, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    map = new google.maps.Map(document.getElementById('map'), myOptions); 

    /* Ici, on ajoute l'écouteur d'événement suite à un glisser/déposer */ 
    google.maps.event.addListener(map, 'idle', function() { 
     var bds = map.getBounds(); 
     var South_Lat = bds.getSouthWest().lat(); 
     var South_Lng = bds.getSouthWest().lng(); 
     var North_Lat = bds.getNorthEast().lat(); 
     var North_Lng = bds.getNorthEast().lng(); 
     var Zoom_Level = map.getZoom();   // hide and delete the existing markers 

     for (var i=0; i<gmarkers.length; i++) { 
      gmarkers[i].setMap(null); 
     } 

     gmarkers = []; 
     downloadUrl("./includes/AjaxMarkers.php?maxlat="+North_Lat+"&minlat="+South_Lat+"&minlong="+South_Lng+"&maxlong="+North_Lng+"&zoom="+Zoom_Level, function(data) { 
      var xml = xmlParse(data); 
      var markers = xml.documentElement.getElementsByTagName("marker"); 
      for (var i = 0; i < markers.length; i++) { 
       createMarker(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")), markers[i].getAttribute('titre')); 
      } 

      var markerClusterer = new MarkerClusterer(map, gmarkers); 
     }); 

     markerClusterer.resetViewport() 
    }); 
} 

function createMarker(lat, lng, titre) { 
    var latlng = new google.maps.LatLng(lat, lng); 
    var marker = new google.maps.Marker({ 
     position: latlng, 
     map: map, 
     title: titre }); // keep a reference to created markers so you can remove them 
    gmarkers.push(marker); 
} 

Спасибо Вам!

ответ

1

Ваш маркерClusterer определен внутри обратного вызова для downloadUrl и недоступен за пределами этой области.

Простейшим решением является определение его в глобальном контексте.

var map; 
var gmarkers = []; 
var markerClusterer = null; 

function initialize() { 

затем в обратном вызове downloadUrl:

downloadUrl("./includes/AjaxMarkers.php?maxlat="+North_Lat+"&minlat="+South_Lat+"&minlong="+South_Lng+"&maxlong="+North_Lng+"&zoom="+Zoom_Level, function(data) { 
     var xml = xmlParse(data); 
     var markers = xml.documentElement.getElementsByTagName("marker"); 
     for (var i = 0; i < markers.length; i++) { 
      createMarker(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")), markers[i].getAttribute('titre')); 
     } 

     markerClusterer = new MarkerClusterer(map, gmarkers); 
    }); 
+0

Отлично! Спасибо огромное! – user3087480

Смежные вопросы