Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Maps V3: Only show markers in viewport - Clear markers issue

People also ask

How do I hide markers on Google Maps?

Step 1 Go to Add or Edit Map and Scroll down to the 'Infowindow Settings' section. Step 2 Enable the box of 'Hide Markers on Page Load' option. Step 3 Click on Save Map and open it in browser.

How do I remove a marker cluster from Google Maps?

Removing all markers You can then clear all the markers using clearMarkers something like this: markerClusterer. clearMarkers(); markers = [];

How do you refresh a marker on Google Maps?

To reload the markers, when you create then, push them to an array. Then create a function where you iterate through the array, setting the markers map as null. After this, erase the array.

How many markers can Google Maps handle?

2048 characters in URL is just under 100 GeoCode values. So, again no more than 100 markers.


You need to add another Event Listener to the map:

google.maps.event.addListener(map,'bounds_changed', removeMarkers);

See here for more on removing all markers from a google map - unfortunately I dont think it can be done with one call. So you will have to write the removeMarkers or something similar which will have to iterate through all the markers on the map removing them individually like so:

 markersArray[i].setMap(null);

I don't know whether it's quicker to check if the marker is in the viewport before removing by using:

 map.getBounds();

Read more about Google Map API v3 events


You may want to check out this thread. Daniel answered this quite nicely.

What's the most efficient way to create routes on google maps from gps files?

Also, bounds_changed is the first opportunity to call your function. tilesloaded, will be called constantly. The viewport may contain more than one tile to fill the viewport.

Alternatively, you can also do a setVisible(false).

In order to remove the marker, you may need to remove the listeners.

google.maps.event.clearInstanceListeners(marker);
marker.setMap(null);
markers.remove(marker);
delete marker;

Due to the following explanation using 'tilesloaded' or 'bounds_changed' would be very wrong and cause unwilling continuous firings. Instead you would want to use 'idle' event which will fire once the user has stopped panning/zooming.

google.maps.event.addListener(map, 'idle', loadMapFromCurrentBounds);

https://developers.google.com/maps/articles/toomanymarkers#viewportmarkermanagement


This article goes through it pretty nicely: Dynamically loading thousands of markers in Google Maps

  • dynamically load markers until we reach a threshold
  • keep a hashtable of markers that have already been added
  • after the threshold has been reached, remove markers that aren’t currently within the viewport
  • remove all markers from the map when the user has zoomed out, and don’t load any markers until the user zooms back to a reasonable level

Your original function seems like a lot of code. I'd do something like this:

if( map.getBounds().contains(markers[i].getPosition()) ) {
   myMarkerDisplayFunction(markers[i]);
}