Pregunta

Cualquier cambio en el nivel de zoom hace que todos los marcadores aparezcan en el mapa que han estado en el mapa en cualquier momento desde la última página. Esto es cierto si el cambio de nivel de zoom se debe a una llamada de SetZoom () en mi código o porque opero el control deslizante de zoom.

Tengo un widget de control de mapas con botones para agregar marcadores que corresponden a diferentes categorías. Por lo tanto, haga clic en el botón para grupos y el mapa se rellena con marcadores que representan grupos. Luego, hace clic en el botón individuales y los marcadores de los grupos se borran y eliminan y los marcadores individuales aparecen en el mapa. Y así sucesivamente con otras categorías. Pero cualquier cambio en el nivel de zoom le devuelve los marcadores que hayan estado en el mapa, ya que la página fue actualizada por última vez.

Estoy usando MarkerClusterPlus. No sé si este sería un error en MarkerClusterReplus, en el código de Google o en mi código. Esperemos que este último. Incluiré mi función de addominios a continuación. Dado que ambos aclaran y eliminan los marcadores antes de agregar nuevos marcadores, no sé cómo es posible que los marcadores anteriores vuelvan, sin inmutar por qué un cambio de zoom active su devolución:

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

Además, si cambio zoom, entonces los marcadores ya no se aclaran. Simplemente continúan acumulándose en el mapa si hago clic en los botones para cambiar la categoría. Que definitivamente no sucede si no cambio el nivel de zoom.

Por solicitud, aquí hay más del 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();
}

Por último, pero no menos importante, aquí está la Biblioteca de MarkerClusterPlus: http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.9/src/

¿Fue útil?

Solución

No sé mucho sobre MarkerClusterer, pero lo que parece estar sucediendo es cada vez que llame a su función de ADMANDMERS, está creando un nuevo marcador, pero el viejo nunca se destruye / elimina, por lo tanto, en el zoom cambia todas las instancias que ha creado.Redibuje los marcadores que tienen.Pruebe el método de ClearMarkers o Remover Markers de MarkerClusterer y también solo cree una instancia de MarkerClusterer y reúnelo en lugar de crear una nueva cada vez que calientas Answers.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top