Событие load является ключевым моментом жизненного цикла
карты. Оно возникает после того, как экземпляр карты полностью
инициализирован и завершил загрузку всех обязательных ресурсов
начального состояния: стиля, источников данных и базовой структуры
слоёв.
Важно различать инициализацию объекта карты и фактическую готовность
к работе. Конструктор Map возвращает экземпляр синхронно,
однако визуально и функционально карта становится готовой только после
наступления load.
loadСобытие срабатывает после выполнения следующих этапов:
Карта считается «готовой к взаимодействию» именно в этот момент.
loadimport maplibregl from "maplibre-gl";
const map = new maplibregl.Map({
container: "map",
style: "https://demotiles.maplibre.org/style.json",
center: [30.3, 59.9],
zoom: 10
});
map.on("load", () => {
map.addSource("points", {
type: "geojson",
data: {
type: "FeatureCollection",
features: []
}
});
map.addLayer({
id: "points-layer",
type: "circle",
source: "points",
paint: {
"circle-radius": 6,
"circle-color": "#3b82f6"
}
});
});
Любые операции, связанные с добавлением слоёв, источников или
манипуляцией стилем, должны выполняться после load, иначе
возникает риск обращения к неинициализированному состоянию стиля.
loadСобытие load вызывается один раз за жизненный цикл
экземпляра карты при первичной загрузке стиля. При последующей смене
стиля оно может возникнуть повторно, поскольку новая конфигурация
воспринимается как новая графическая сцена.
style.loadload не следует путать с style.load:
style.load — событие уровня стиля, срабатывает при
загрузке или смене style JSONload — событие уровня карты, сигнализирует о полной
готовности визуального состоянияВ типичных сценариях load используется как универсальная
точка инициализации.
Даже после load отдельные тайлы могут подгружаться
асинхронно при изменении масштаба или перемещении карты. Это
означает:
load не гарантирует завершение всех возможных сетевых
запросовerrorСобытие error фиксирует любые ошибки, возникающие в
процессе работы карты. Оно является центральным механизмом диагностики
проблем, связанных с загрузкой ресурсов и выполнением рендеринга.
На практике error охватывает несколько категорий:
errormap.on("error", (e) => {
console.error("Map error:", e.error);
});
Объект события обычно содержит поле error, в котором
находится исходное исключение или диагностическая информация.
map.on("error", (e) => {
if (e && e.error) {
console.log("Ошибка карты:", e.error.message);
}
});
Подобный подход позволяет централизованно отслеживать сбои загрузки тайлов и источников.
Некоторые ошибки могут быть нефатальными (например, отсутствие отдельных тайлов):
map.on("error", (e) => {
const error = e.error;
if (!error) return;
if (error.status === 404) {
return;
}
console.warn("Критическая ошибка:", error);
});
errorЕсли URL стиля недоступен или возвращает некорректный JSON, карта не сможет завершить инициализацию.
new maplibregl.Map({
container: "map",
style: "https://example.com/missing-style.json"
});
Результатом станет событие error с информацией о сетевом
сбое.
GeoJSON с некорректной структурой приводит к ошибкам парсинга:
map.addSource("bad-source", {
type: "geojson",
data: "invalid-string"
});
Такие ошибки проявляются сразу после попытки интерпретации источника.
При проблемах с графическим контекстом (например, потеря контекста GPU) генерируются ошибки рендеринга. Это критические сбои, влияющие на отображение всей карты.
load и
errorСобытия load и error формируют базовый цикл
готовности карты:
load сигнализирует об успешной инициализацииerror фиксирует любые отклонения от нормального
состоянияПри этом error может возникать как до load,
так и после него.
const map = new maplibregl.Map({ ... });
map.on("error", (e) => {
console.log("Ошибка до load или после:", e.error);
});
map.on("load", () => {
console.log("Карта готова");
});
При вызове setStyle происходит частичный перезапуск
жизненного цикла:
map.setStyle("https://example.com/new-style.json");
После смены стиля снова возникают:
loadЭто требует повторной подписки или повторной инициализации логики,
завязанной на load.
errorВнутренняя структура ошибки может включать:
message — текст ошибкиstatus — HTTP кодurl — ресурс, вызвавший сбойtype — тип источника (tile, style, sprite)Пример анализа:
map.on("error", (e) => {
const err = e.error;
if (err?.status === 401) {
console.log("Проблема авторизации при загрузке ресурса");
}
if (err?.type === "sprite") {
console.log("Ошибка загрузки спрайта стиля");
}
});
Ошибка одного источника не всегда останавливает работу всей карты. Система рендеринга продолжает функционировать с доступными данными, однако:
Такая устойчивость делает механизм error важным
инструментом мониторинга, а не только остановки выполнения.