Проверка LeafletJS на отсутствие загрузки карты

Как я могу определить, правильно ли загружается карта? Случилось так, что в моем ионном приложении URL-адрес карты перестал работать, и карта не выдавала ошибку. Он отображался только серым.

Есть ли способ правильно проверить это событие и вернуться к альтернативной карте?


person El Dude    schedule 28.10.2015    source источник
comment
Я думаю, что в инфраструктуре листовок произошел сбой, потому что карты не работали целый день. Они вернулись позже по какой-то магической причине.   -  person El Dude    schedule 30.10.2015


Ответы (3)


Обычным, но упрощенным обходным решением является указание одной резервной плитки с помощью параметра errorTileUrl вашего тайлСлой. Обычно он показывает светло-красный крест, чтобы сообщить пользователю, что у картографического сервера нет изображения для этой области и этого масштаба.

Теперь, если вы хотите быть умнее и вернуться к другой карте (т. е. перенаправить на другой URL-адрес), я не знаю ни одного готового решения, но это очень хорошо выполнимо. Идея состоит в том, чтобы переопределить метод _tileOnError класса L.TileLayer, который обычно заменяет плитку на плитку из errorTileUrl, когда получает ошибку 404 (т. е. плитка недоступна на сервере). В данной ссылке он автоматически заменяет URL-адрес новым для другого местоположения (может быть другим сервером), поскольку ожидает, что отсутствуют только несколько плиток.

Теперь, если вы предполагаете, что весь сервер перестанет отвечать, и вы хотите переключиться на другой tileLayer (чтобы он перестал пинговать неисправный сервер), вы можете реализовать, например, простой счетчик, который увеличивается с помощью метода _tileOnError, и один раз заданный порог достигнут, переключаем слои.

person ghybs    schedule 28.10.2015

Я могу опоздать с ответом на этот вопрос, но вот события слоя, которые вы можете использовать. Это событие запускается на слое, а не на карте. В этом случае, если bingLayer не загрузится, сработает tileerror.

this.bingLayer.on("tileerror", function (error, tile) {
 //do something when the tile fails to load
});

this.bingLayer.on("tileload", function(e){
  //do something when the tile loads successfully
})
person Rajesh Panda    schedule 20.07.2017

Испытал же недавний. Причину нашел здесь Политика использования плитки.

Данные OpenStreetMap бесплатны для всех. Наши тайловые серверы - нет.

Ниже приведены минимальные требования, которые должны соблюдать пользователи tile.openstreetmap.org. В будущем они могут измениться в зависимости от доступных ресурсов. >Если какие-либо пользователи или шаблоны использования, тем не менее, вызывают проблемы в >службе, доступ может быть заблокирован без предварительного уведомления. Мы постараемся связаться с соответствующими сторонами, если это возможно, но не можем этого гарантировать.

Но поскольку данные OpenStreetMap бесплатны, многие другие организации предоставляют карты, созданные из данных OSM. Если ваш проект не соответствует этим требованиям, >вы можете получить тайлы карты, полученные из OSM, в другом месте. Требования

Интенсивное использование (например, распространение приложения, использующего плитки с >openstreetmap.org) запрещено без предварительного разрешения системных >администраторов. См. ниже альтернативы. Четко отображать атрибуцию лицензии. Не поощряйте активно или пассивно нарушение авторских прав. Вызовы /cgi-bin/export могут быть вызваны только прямым действием конечного пользователя. >(Например: «нажмите здесь, чтобы экспортировать».) Вызов экспорта является дорогостоящей функцией >(ЦП+ОЗУ) для выполнения и часто будет отклоняться, когда сервер находится под >высокой нагрузкой. Настоятельно рекомендуется: не кодируйте никакие URL-адреса на tile.openstreetmap.org > в приложении. Рекомендуется: добавьте ссылку на https://www.openstreetmap.org/fixthemap, чтобы >разрешить пользователям сообщать и исправлять проблемы с нашими данными.

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

{tileLayer: "http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png",
    zoomControl: false,
    tileLayerOptions: {
        opacity: 0.9,
        detectRetina: true,
        reuseTiles: true
    },
    scrollWheelZoom: false,
    attributionControl: false
}

В двух словах OSM заблокировал тайлы карты.

person Great-Josh    schedule 30.10.2017