Cualquier cambio en el nivel de zoom hace que todos mis marcadores vuelvan a aparecer en mi mapa de Google
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 carga de la página. Esto es cierto si el cambio de nivel de zoom se debe a una llamada setZoom () en mi código o porque opero el control deslizante de zoom.
Tengo un widget de control de mapa con botones para agregar marcadores que corresponden a diferentes categorías. Por lo tanto, hace clic en el botón para Grupos y el mapa se llena con marcadores que representan Grupos. Luego, hace clic en el botón Individuales y los marcadores de 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 devuelve los marcadores que han estado en el mapa desde la última actualización de la página.
Estoy usando MarkerClustererPlus. No sé si esto sería un error en MarkerClustererPlus, en el código de Google o en mi código. Ojalá lo último. Incluiré mi función addMarkers a continuación. Dado que borro y elimino los marcadores antes de agregar nuevos marcadores, no sé cómo es posible que los marcadores anteriores vuelvan, no importa por qué un cambio de zoom activa su 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);
}
Además, si cambio el zoom, los marcadores ya no se borran. Simplemente continúan acumulándose en el mapa si hago clic en los botones para cambiar de categoría. Eso 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 MarkerClustererPlus:http: //google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.9/src