Как предварительно загрузить какую-то часть карт Google?

Я создаю веб-приложение с Google Maps API, мне нужно плавно увеличивать область, поэтому я использую setTimeout для увеличения уровня масштабирования каждую секунду, но в некоторых местах с плохой сетью изображения карты загружаются слишком медленно, чем страница быстро превратится в белую страницу ....

поэтому мой вопрос: можно ли предварительно загрузить некоторую часть Google Maps (масштабирование от 3 до 16 точек)


person wong2    schedule 06.04.2012    source источник
comment
У меня такая же проблема. Хотите сделать изменение уровня масштабирования более плавным ...   -  person Flaudre    schedule 24.02.2017
comment
@Flaudre вы пробовали решение RASG?   -  person wong2    schedule 27.02.2017
comment
Возможно, медленное увеличение масштаба - не лучший вариант для пользователей с медленным подключением? Даже если вы предварительно загрузите все данные, им придется подождать, пока в какой-то момент загрузится много изображений.   -  person dpix    schedule 02.03.2017
comment
@Flaudre, пожалуйста, проверьте ответ.   -  person shukshin.ivan    schedule 03.03.2017


Ответы (2)


вы, вероятно, могли бы предварительно загрузить его в скрытый div или iframe.

но вы должны убедиться, что это не противоречит Условиям использования API Карт Google / Google Планета Земля

10.1.3 Ограничения на экспорт или копирование данных.

(b) Запрет на предварительную загрузку, кеширование или хранение контента. Вы не должны предварительно извлекать, кэшировать или хранить какой-либо Контент, за исключением того, что вы можете хранить: (i) ограниченное количество Контента с целью повышения производительности вашей Реализации API Карт, если вы делаете это временно, безопасно и в способ, который не позволяет использовать Контент за пределами Сервиса; и (ii) любой идентификатор содержимого или ключ, который Документация API Карт специально разрешает вам хранить. Например, вы не должны использовать Контент для создания независимой базы данных «мест».

person RASG    schedule 09.04.2012
comment
Читая это, похоже, можно предварительно загрузить его для повышения производительности. - person dalore; 15.08.2014
comment
Похоже, ToS не против решения @RASG. Так что продолжайте и не волнуйтесь! Чувак, мы тебя поддержим в любом суде! - person BehradKhodayar; 26.02.2017

Создайте код

Я только что создал сценарий, основанный на идее RASG пятилетней давности. Давайте создадим скрытую карту и, когда она будет полностью загружена, увеличим ее. Мы делаем это снова и снова, пока она не кэширует все увеличения. Рабочая скрипка находится здесь. Я поместил информацию div в верхнем правом углу, чтобы увидеть, как прогрессирует масштабирование.

// init the hidden map
var mapOptions = {
  center: new google.maps.LatLng(center.lat, center.lng),
  zoom: minZoom + 1
};
var preMap = new google.maps.Map(document.getElementById('map-canvas-hidden'), mapOptions);

// when the current hidden map is fully loaded, zoom it in 
preMap.addListener('tilesloaded', function() {
  $('#out').html('Zoom ' + preMap.getZoom() + ' preloaded');

  // if there is zoom to zoom-in, do it after some rest
  if(preMap.getZoom() < maxZoom) {
    setTimeout(function(){
      preMap.setZoom(preMap.getZoom() + 1);
    }, 50);
  }
});

Действительно ли он кэширует карту?

Что ж, очистите кеш браузера и откройте скрипку.

введите описание изображения здесь

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

введите описание изображения здесь

Надеюсь, поможет.

person shukshin.ivan    schedule 02.03.2017
comment
Вы можете рассчитать скорость вашего медленного увеличения по времени получения первых двух кешей. - person shukshin.ivan; 03.03.2017
comment
очень хорошо! +1 за то, что запачкал руки :) - person RASG; 06.03.2017
comment
Привет, Иван, большое спасибо за усилия. Я проверил страницу слишком поздно, чтобы наградить награду. Я надеюсь, что вы согласны с простым голосом "за". - person Flaudre; 10.03.2017