Кажется, что нет функции обратного вызова или прослушивателя событий для setMap (), но я нашел способ выполнить то, что я хотел.Я загружаю карту Google с помощью jQuery.Вот мой код.
При инициализации карты я настраивал прослушиватель для события 'idle', которое скрывает анимацию "загрузки".Событие 'idle' запускается всякий раз, когда карта перерисовывается после изменения прокрутки или масштабирования:
google.maps.event.addListener(this.map, 'idle', function() {
$('#loading').hide();
});
И в моей функции очистки оверлеев я сначала показываю анимацию загрузки, затем очищаю каждый маркер, используя setMap(ноль).Затем я немного перецентрирую карту, изменив долготу на .000000001.Это происходит после всех вызовов setMap () и вызывает событие 'idle', которое скрывает загрузочную анимацию.
// 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);
}
Это что-то вроде хака, но я надеюсь, что кто-то еще посчитает это полезным.