API Google Maps v3: есть ли функция callback или eventener для события setMap()?

Я использую Google Maps API v3 на разрабатываемом веб-сайте. У меня есть выпадающий список под моей картой, который позволяет пользователю переключаться между различными наборами маркеров, которые будут отображаться на карте. Каждый маркер отображается с помощью marker.setMap().

Моя проблема в том, что для отображения новых маркеров иногда требуется много времени, особенно в IE. Я хочу показать анимацию "Загрузка", пока карта переключает маркеры. Но я не знаю, как определить, когда карта закончила отображать новые данные (нет загрузки страницы, так как это все AJAX). Есть ли обратный вызов или прослушиватель событий для события setMap(), чтобы я мог вызвать функцию, чтобы остановить анимацию "Загрузка", когда последний маркер завершил загрузку?

Ответы

Ответ 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);
}

Это немного взломать, но я надеюсь, что кто-то еще найдет это полезным.