2012-01-26 6 views
7

Attualmente ho una serie di marcatori e li ho raggruppare in questo modo:markercluster non cambiare dopo setVisible

var markerCluster = new MarkerClusterer(map, cm_mapMarkers); 

Ma ho anche una serie di filtri che io uso per impostare i marcatori visibile falsi o veri. Sfortunatamente quando imposto il marker setvisible (false) il numero di cluster non cambia.

Così ho cercato metodi per farlo:

ho provato la seguente:

MarkerClusterer.redraw(); 
MarkerClusterer.repaint(); 

Entrambi conseguente: non ha un metodo 'ridipingere' non ha un metodo 'ridisegnare'

Qui è un JSfiddle:

http://jsfiddle.net/tDYcX/30/

Qualcuno sa cosa sto sbagliando?

Grazie in anticipo

risposta

14

sono riuscito a farlo utilizzando markerclustererplus e utilizzando markerCluster.setIgnoreHidden(true); and markerCluster.repaint();

+0

La tua soluzione funziona perfettamente per me, grazie! – AlexB

+0

Dude guy! Sono stato alla ricerca di questa soluzione per settimane. Grazie. –

2

Il MarkerClusterer non è realmente progettati per questo genere di cose. Il modo più semplice per fare ciò che vuoi è clearMarkers() quindi addMarkers(markers) con una nuova serie di marcatori che corrispondono al tuo filtro.

+0

C'è davvero nessun altro modo? Ho pensato che il ridisegno o il ridisegno funzionassero ... – Emrulez

+0

Il MarkerClusterer non si cura/presta attenzione allo stato visibile dei marker, utilizza solo la posizione. Il Marker viene aggiunto alla mappa solo quando c'è un solo marker in un cluster. – skarE

1

Dopo un po 'di tentativi, ho trovato una soluzione che funziona, forse utile per qualcuno là fuori ...

Salvare il markerCluster e la tua mappa (mymap) in variabili.

Poi ciclo throuth tutti i marcatori disponibili e di come questo:

if (show) { 
     markerCluster.addMarker(markers[i]); 

     if (markers[i].getMap == null) 
      markers[i].marker.setMap(mymap); 
     showing++; 
    } else { 

     markerCluster.removeMarker(markers[i]); 

     if (markers[i].getMap != null) 
      markers[i].marker.setMap(null); 
    }