Google Maps API v3: Existe-t-il un rappel ou un auditeur d'événement pour un événement setMap ()?

J'utilise Google Maps API v3 sur un site Web que je développe. J'ai une boîte déroulante sous ma carte qui permet à l'utilisateur de basculer entre différents ensembles de marqueurs à afficher sur la carte. Chaque marqueur est affiché à l'aide de marker.setMap ().

Mon problème est que la carte prend parfois beaucoup de temps pour afficher les nouveaux marqueurs, en particulier dans IE. Je souhaite montrer une animation "Chargement" tandis que la carte change de marqueur. Mais je ne sais pas comment détecter quand la carte a fini d'afficher les nouvelles données (il n'y a pas de chargement de page, car c'est tout AJAX). Existe-t-il un rappel ou un auditeur d'événement pour un événement setMap (), donc je peux appeler une fonction pour arrêter l'animation "Chargement" lorsque le dernier marqueur a fini de charger?

Il ne semble pas y avoir de rappels ou d'écouteurs d'événements pour setMap (), mais j'ai compris un moyen d'accomplir ce que je voulais. Je charge la Google Map en utilisant jQuery. Voici mon code.

Lors de l'initialisation de la carte, j'ai configuré un auditeur pour l'événement "inactif", qui cache l'animation "chargement". L'événement "inactif" est déclenché chaque fois que la carte est terminée en se redessinant après une modification de défilement ou de zoom:

google.maps.event.addListener(this.map, 'idle', function() { $('#loading').hide(); }); 

Et dans ma fonction d'effacer les superpositions, je montre d'abord l'animation de chargement, puis nettoie chaque marqueur en utilisant setMap (null). Ensuite, j'ai récemment récent la carte en modifiant la longitude par .000000001. Cela se produit après tous les appels setMap () et déclenche l'événement «inactif» qui masque l'animation de chargement.

 // clear overlays from the map function clearOverlays() { $('#loading').show(); // clear the markers from the active data array if (activeData) { for (i in activeData) { activeData[i].setMap(null); } } activeData = ''; // very slightly recenter the map to trigger the 'idle' event var centerlat = MYMAP.map.getCenter().lat(); var centerlng = MYMAP.map.getCenter().lng() + .000000001; recenter = new google.maps.LatLng(centerlat, centerlng); MYMAP.map.setCenter(recenter); } 

C'est un peu un hack, mais j'espère que quelqu'un d'autre le trouve utile.