Как проверить, полностью ли загружена Google Maps?

Внедрение Google Maps на мой веб-сайт. После загрузки Карт Google мне нужно запустить несколько процессов JavaScript.

Есть ли способ автоматически обнаружить, когда Google Maps полностью загружен, в том числе загрузки файлов и т.д.

A tilesloaded() существует метод, который должен выполнить именно эту задачу, но он не работает.

Ответ 1

Это немного беспокоило меня с помощью GMaps v3.

Я нашел способ сделать это вот так:

google.maps.event.addListenerOnce(map, 'idle', function(){
    // do something only the first time the map is loaded
});

Событие "бездействия" запускается, когда карта переходит в состояние ожидания - все загружено (или не загружено). Я обнаружил, что он более надежный, чем patchloaded/bounds_changed, и используя метод addListenerOnce, код в закрытии выполняется при первом запуске "холостого хода", а затем событие отключается.

См. также раздел в Справочнике Карт Google.

Ответ 2

Я создаю мобильные приложения html5, и я заметил, что события idle, bounds_changed и tilesloaded срабатывают, когда объект карты создается и отображается (даже если он не отображается).

Чтобы сделать мой код запуска карты, когда он показан в первый раз, я сделал следующее:

google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
    //this part runs when the mapobject is created and rendered
    google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
        //this part runs when the mapobject shown for the first time
    });
});

Ответ 3

Если вы используете Maps API v3, это изменилось.

В версии 3 вы действительно хотите настроить прослушиватель для события bounds_changed, который будет запускаться при загрузке карты. После того, как это вызвано, удалите прослушиватель, так как вы не хотите получать информацию каждый раз, когда изменяются границы области просмотра.

Это может измениться в будущем по мере развития V3 API: -)

Ответ 4

Если вы используете веб-компоненты, у них есть это в качестве примера:

map.addEventListener('google-map-ready', function(e) {
   alert('Map loaded!');
});

Ответ 5

GMap2::tilesloaded() будет событием, которое вы ищете.

См. GMap2.tilesloaded для ссылок.

Ответ 6

Если переменная map является объектом типа GMap2:

    GEvent.addListener(map, "tilesloaded", function() {
      console.log("Map is fully loaded");
    });

Ответ 8

В моем случае перед визуализацией изображения был запущен Tile Image, загруженный из удаленного URL- tilesloaded и tilesloaded события.

Я решил со следующим грязным способом.

var tileCount = 0;
var options = {
    getTileUrl: function(coord, zoom) {
        tileCount++;
        return "http://posnic.com/tiles/?param"+coord;
    },
    tileSize: new google.maps.Size(256, 256),
    opacity: 0.5,
    isPng: true
};
var MT = new google.maps.ImageMapType(options);
map.overlayMapTypes.setAt(0, MT);
google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
    var checkExist = setInterval(function() {
        if ($('#map_canvas > div > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div > div').length === tileCount) {
            callyourmethod();
            clearInterval(checkExist);
        }
    }, 100); // check every 100ms
});

Ответ 9

Вы можете проверить метод GMap2.isLoaded() каждые n миллисекунды, чтобы увидеть, была ли карта и все ее плитки загружены (window.setTimeout() или window.setInterval() являются вашими друзьями).

Пока это не даст вам точного события завершения загрузки, оно должно быть достаточно хорошим для запуска вашего Javascript.