I have a google map set up with markers supplied via a JSON feed. Since there are a large number of markers involved (over 600) I have used markerclusterer v3 to speed things up. Everything is working fine until I try to change the markers displayed via option buttons. I have this function assigned to radio buttons :
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;
}
This will stop the markers from displaying on the map and works fine for the actual google markers. However I don't seem to be able to find how to update the cluster which was created when the page loaded.
You can delete the markers by removing them from the map and then setting the array's length to 0 , which removes all references to the markers.
In order to update a cluster you should first call resetViewport();
method to hide it than use redraw();
method to recalculate clusters.
Using a setMap(null) function on a marker won't unregister it from a markerClusterer, to unregister you can use removeMarkers(marker, opt_nodraw)
or removeMarkers(markers, opt_nodraw)
functions. From my experience these are expensive operations. Setting opt_nodraw
function to true
will force no redraw which will improve performace.
You can first delete a bunch of markers with opt_nodraw
set to true
and than resetViewport();
redraw();
later manually.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With