2011-05-17 18 views
5

Tengo un mapa de Google configurado con marcadores proporcionados a través de un feed JSON. Dado que hay una gran cantidad de marcadores involucrados (más de 600) he usado el marcador del finalizador v3 para acelerar las cosas. Todo funciona bien hasta que intento cambiar los marcadores que se muestran a través de los botones de opción. Tengo esta función asignada a los botones de radio:Actualizar conjuntos de marcadores

function activities(markerarray,mapused,actType) { 
    for(i in markerarray) { 
     if(markerarray[i].activity[actType] == null) { 
      markerarray[i].setMap(null); 
    } 
     else { 
      markerarray[i].setMap(mapused); 
    } 
} 
return markerarray; 
} 

Esto evitará que los marcadores se muestren en el mapa y funciona bien para los marcadores de Google reales. Sin embargo, parece que no puedo encontrar la forma de actualizar el clúster que se creó cuando se cargó la página.

Respuesta

1

Tuve el mismo problema y por lo que pude ver al leer el código fuente ... no puede.

DEPOSITO todos los elementos en el fondo como marcadores individuales, filtrarlos cuando sea necesario

displayItems: function(infilter){ 
     this.markerCluster.clearMarkers(); 
     var matches = infilter.matches(this.markers); 
     this.markerCluster.addMarkers(matches); 

    } 

this.markers es mi caché de marcadores y this.markerCluster es mi objeto markerCluster - ambos son globales.

No puede editar directamente un clúster, pero puede agregar y eliminar marcadores en el objeto markerCluster utilizando addMarker/removeMarker que a su vez los eliminará de un clúster y lo volverá a dibujar.

+0

Gracias @Dve, funcionó! Creo que estaba viendo el problema de vuelta al frente. –

6

Para actualizar un clúster, primero debe llamar al método resetViewport(); para ocultarlo, antes de usar el método redraw(); para recalcular clústeres.

Utilizando una función setMap (nulo) en un marcador no va a anular el registro de un markerClusterer, para anular el registro se puede utilizar removeMarkers(marker, opt_nodraw) o removeMarkers(markers, opt_nodraw) funciones. Desde mi experiencia, estas son operaciones costosas. La configuración de la función opt_nodraw al true no obligará a volver a dibujar, lo que mejorará el rendimiento.

primera Puede borrar un par de marcadores con opt_nodraw conjunto de true y que resetViewport();redraw(); tarde manualmente.