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