Qualquer alteração no nível de zoom faz com que todos os meus marcadores reapareçam no meu mapa do Google

Qualquer alteração no nível de zoom faz com que todos os marcadores apareçam no mapa que estejam no mapa a qualquer momento desde o último carregamento da página. Isso é verdade se a alteração do nível de zoom ocorre devido a uma chamada setZoom () no meu código ou porque eu opero o controle deslizante de zoo

Tenho um widget de controle de mapa com botões para adicionar marcadores que correspondem a diferentes categorias. Então você clica no botão Grupos e o mapa é preenchido com marcadores que representam Grupos. Em seguida, você clica no botão Indivíduos e os marcadores de Grupos são limpos e excluídos e os marcadores individuais aparecem no mapa. E assim por diante com outras categorias. Mas qualquer alteração no nível de zoom traz de volta os marcadores que estavam no mapa desde a última atualização da página.

Estou usando MarkerClustererPlus. Não sei se isso seria um erro no MarkerClustererPlus, no código do Google ou no meu código. Espero que o último. Vou incluir minha função addMarkers abaixo. Como eu limpo e excluo os marcadores antes de adicionar novos marcadores, não sei como é possível os marcadores anteriores voltarem, não importa por que uma alteração no zoom aciona seu retorno:

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

Além disso, se eu alterar o zoom, os marcadores não serão mais limpos. Eles apenas continuam a se acumular no mapa se eu clicar nos botões para mudar de categoria. Definitivamente, isso não acontece se eu não alterar o nível de zoom.

A pedido, aqui está mais do código:

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

Último, mas não menos importante, aqui está a biblioteca MarkerClustererPlus:http: //google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.9/src

questionAnswers(2)

yourAnswerToTheQuestion