Статус обработки

Система отображения карт в Mapbox GL JS построена на асинхронной загрузке и многоступенчатой обработке данных. Внутренний статус обработки представляет собой совокупность состояний карты, источников данных, тайлов, стилей, шрифтов и изображений, которые проходят через конвейер рендеринга до момента полной готовности сцены.

Конвейер загрузки карты

Инициализация карты запускает цепочку этапов, каждый из которых фиксируется через события и внутренние флаги состояния.

Основные стадии:

  • загрузка и парсинг стиля
  • загрузка источников данных (sources)
  • загрузка тайлов (vector / raster tiles)
  • загрузка спрайтов (sprites)
  • загрузка шрифтов (glyphs)
  • компиляция слоёв и рендеринг сцены WebGL

Каждый этап может завершаться независимо, но финальное состояние зависит от совокупности всех компонентов.

Статус style и базовая готовность

Стиль карты является центральным элементом, определяющим структуру визуализации.

Ключевые состояния:

  • style.load — стиль загружен и разобран
  • styledata — обновление данных стиля (слои, источники)
  • load — базовая инициализация карты завершена
  • error — ошибка загрузки стиля или ресурсов

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

Состояние источников данных (sources)

Источники данных определяют географическую информацию, используемую для отрисовки слоёв.

Типы источников:

  • vector sources
  • raster sources
  • geojson sources
  • image sources
  • video sources

Контроль статуса осуществляется через события:

  • sourcedata — изменение состояния источника
  • data — обновление данных источника
  • data loading — начало загрузки данных

Методическая проверка:

  • map.isSourceLoaded(id) — источник полностью загружен
  • map.areTilesLoaded() — все тайлы источников загружены

Источник считается полностью обработанным только после загрузки всех связанных тайлов и метаданных.

Статус тайлов (tiles)

Тайлы являются основной единицей рендеринга в векторных и растровых картах.

Жизненный цикл тайла:

  • запрос тайла по координатам z/x/y
  • загрузка данных по сети
  • декодирование векторных данных
  • подготовка к WebGL рендерингу
  • кэширование в памяти

События:

  • dataloading — начало загрузки тайлов
  • data — завершение загрузки
  • tileerror — ошибка загрузки тайла

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

Glyphs и спрайты как часть статуса

Отдельную категорию составляют вспомогательные ресурсы.

Glyphs (шрифты):

  • загружаются по диапазонам символов
  • кэшируются по URL шаблону
  • могут загружаться частично при разных языках

Sprites:

  • содержат иконки слоёв
  • загружаются единым JSON + изображение atlas
  • необходимы для корректной отрисовки символов и маркеров

Отсутствие glyphs или sprites не блокирует загрузку карты, но влияет на полноту визуального состояния.

Событие idle как индикатор полной готовности

Ключевым индикатором завершения всех процессов выступает событие idle.

Состояние idle означает:

  • отсутствуют активные сетевые запросы
  • все тайлы загружены
  • нет ожидающих обновлений стиля
  • рендеринг находится в стабильном состоянии

Важно учитывать, что карта может выходить из idle при любом изменении данных, зума или перемещения.

Внутренние методы проверки статуса

Mapbox GL JS предоставляет набор методов для синхронной проверки состояния:

  • map.loaded() — карта полностью загружена
  • map.isStyleLoaded() — стиль завершил загрузку
  • map.areTilesLoaded() — тайлы завершены
  • map.getSource(id) — доступ к источнику для анализа состояния

Комбинация этих методов используется для построения внешних систем контроля состояния.

Поток событий загрузки

Статус обработки формируется как последовательность событий:

  1. load
  2. style.load
  3. styledata
  4. sourcedata
  5. dataloading
  6. data
  7. повторяющиеся циклы обновления данных
  8. idle

Каждое изменение карты (панорамирование, масштабирование, фильтрация слоёв) может повторно запускать часть цикла.

Частичная готовность и инкрементальный рендеринг

Система рендеринга в Mapbox GL JS построена на инкрементальном обновлении сцены.

Состояния частичной готовности:

  • базовый слой отображён, но тайлы догружаются
  • стиль применён, но glyphs отсутствуют
  • источники частично обновлены
  • изображения слоёв загружаются асинхронно

Рендеринг при этом не блокируется и продолжает обновляться по мере поступления данных.

Ошибки как часть статуса обработки

Ошибки не прерывают общий жизненный цикл карты, но влияют на полноту состояния.

Типовые ошибки:

  • недоступные тайлы
  • неверные URL источников
  • ошибки CORS
  • отсутствие glyph ranges
  • сбой загрузки sprite atlas

Обработка ошибок фиксируется через событие error, при этом система продолжает попытки повторной загрузки в зависимости от конфигурации источника.

Согласованность состояния рендера

Финальная визуальная консистентность достигается только при одновременном выполнении условий:

  • все источники данных загружены
  • отсутствуют активные сетевые запросы
  • завершена обработка стиля
  • завершена отрисовка текущего кадра WebGL
  • карта находится в состоянии idle

Несмотря на это, динамические данные (например, live tiles или анимации) могут постоянно переводить систему между состояниями готовности и загрузки.