Qualsiasi cambiamento nel livello di zoom fa sì che tutti i miei marcatori vengano ri-visualizzati sulla mia Google Map

StackOverflow https://stackoverflow.com//questions/9612360

Domanda

Qualsiasi modifica nel livello di zoom Cause tutti i marcatori di visualizzare sulla mappa che sono presenti sulla mappa in qualsiasi momento dall'ultimo carico della pagina. Questo è vero se il cambio del livello di zoom è dovuto a una chiamata SetZoom () nel mio codice o perché azionando il cursore dello zoom.

Ho un widget di controllo della mappa con i pulsanti per aggiungere marcatori che corrispondono a categorie diverse. Quindi fai clic sul pulsante per i gruppi e la mappa popola con i marcatori che rappresentano gruppi. Quindi fai clic sul pulsante Individui e i marchi dei gruppi vengono cancellati ed eliminati e i singoli indicatori appaiono sulla mappa. E così via con altre categorie. Ma qualsiasi cambiamento nel livello di zoom riporta indietro eventuali marcatori che sono stati sulla mappa poiché la pagina è stata aggiornata l'ultima volta.

Sto usando markerclustererplus. Non so se questo sarebbe un bug in Markerclustererplus, nel codice di Google o nel mio codice. Si spera che quest'ultimo. Includerò la funzione dei miei componenti aggiuntivi qui sotto. Dal momento che sia chiaro ed eliminando i marcatori prima di aggiungere nuovi marcatori, non so come sia possibile per i precedenti marcatori di tornare, nonminando perché un cambio di zoom attiva il loro ritorno:

function addMarkers(map,flag) { 

  clearOverlays();
  deleteOverlays();

  if ('event' == flag) {
    data = himaps_event_data;
  } else if ('story' == flag) {
    data = himaps_story_data;
  } else if ('group' == flag) {
    data = himaps_group_data;
  } else {
    data = himaps_user_data;
  }

  for (var k in data) {
    var item = data[k];
    var latLng = new google.maps.LatLng(item.lat, item.lng);
    var marker = new google.maps.Marker({'position': latLng});
    markersArray.push(marker); 
  } 

  var markerCluster = new MarkerClusterer(map, markersArray);  
}
.

Inoltre, se cambio lo zoom, quindi i marker non si cancellano più. Continuano a accumularsi sulla mappa se faccio clic sui pulsanti per modificare la categoria. Questo sicuramente non succede se non modifico il livello di zoom.

Su richiesta, ecco più del codice:

function clearOverlays() {
  if (markersArray) { 
    for (var i = 0; i < markersArray.length; i++ ) {
      markersArray[i].setMap(null);
    }
  }
}

function deleteOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
    markersArray.length = 0;
  }
}

/* map controls */
(function($) {
  Drupal.behaviors.himaps = {
  attach: function(context, settings) {
    $('.map-controls button').click(function() {
      flag = this.id.replace('map-',''); 
      addMarkers(map,flag);
    });
  }
  }
})(jQuery);


/* homepage map */
function newMap(clat,clng) {
  if (!clat) {
    clat = 37.65;  
  }
  if (!clng) {
    clng = -97.43;  
  }
  var myOptions = {
    scrollwheel: false,
    mapTypeControl: false,
    mapTypeControlOptions: {
        style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
        position: google.maps.ControlPosition.LEFT_CENTER
    },
    panControl: false,
    panControlOptions: {
        position: google.maps.ControlPosition.LEFT_CENTER
    },
    zoomControlOptions: {
        style: google.maps.ZoomControlStyle.LARGE,
        position: google.maps.ControlPosition.LEFT_CENTER
    },
    draggable: true,
    center: new google.maps.LatLng(clat, clng),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  return new google.maps.Map(document.getElementById("map-canvas"), myOptions);

}

var map;
var markersArray = [];
var geocoder; 
var marker;
var listener;

google.maps.event.addDomListener(window, 'load', initmapping);

function initmapping() { //aka initialize()
  map = newMap();
  addMarkers(map,'group');
  geocoder = new google.maps.Geocoder();
}
.

Ultimo ma non meno importante, ecco la libreria di markerclusterplus: http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerclusterPlus/2.0.9/src/

È stato utile?

Soluzione

Non so molto di Markercluster, ma ciò che sembra accadere è ogni volta che chiami la funzione dei tuoi componenti aggiuntivi stai creando un nuovo markercluster ma il vecchio non viene mai distrutto / rimosso, quindi su Zoom cambia tutte le istanze che hai creatoridisegnare i marcatori che hanno.Prova il metodo ClearMarkers o Removermarkers di MarkerCluster e anche creare solo un'istanza di markerclusteratore e riutilizzarlo invece di crearne uno nuovo ogni volta che si ottiene i componenti aggiuntivi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top