Семантическая разметка

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

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


Источники данных как носители семантики

Каждая визуализация в Mapbox GL JS начинается с источника данных (source). Наиболее важным для семантической разметки является GeoJSON-источник и векторные тайлы.

Атрибуты как смысловые маркеры

Векторные объекты содержат свойства:

  • классификацию объекта (тип дороги, здание, зона)
  • числовые характеристики (высота, плотность, скорость)
  • текстовые метки (названия, категории)
  • бинарные признаки (активен/неактивен, доступен/недоступен)

Эти свойства становятся основой для визуальной логики.


Декларативная стилизация через свойства объектов

Mapbox GL JS использует стиль, описываемый JSON-структурой. Важнейший механизм семантической разметки — data-driven styling, при котором значения свойств напрямую влияют на визуальные параметры.

Интерполяция значений

'circle-radius': [
  'interpolate',
  ['linear'],
  ['get', 'population'],
  0, 2,
  1000000, 10
]

Здесь радиус круга определяется значением свойства population. Геометрия перестает быть абстрактным объектом и становится визуализацией данных.


Выражения как слой семантической логики

Выражения (expressions) формируют основу обработки семантики в стиле карты. Они позволяют вычислять значения без внешнего кода.

Доступ к атрибутам

['get', 'name']

Извлечение свойства делает возможным контекстное отображение.

Условная логика

[
  'case',
  ['==', ['get', 'type'], 'park'],
  '#00ff00',
  '#888888'
]

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


Семантические уровни визуализации

Геометрический уровень

Отвечает за форму объектов:

  • линии дорог
  • полигоны зданий
  • точки интереса

Семантика здесь выражается через тип геометрии.

Атрибутивный уровень

Использует свойства объектов:

  • категория
  • значение метрики
  • статус объекта

Контекстный уровень

Учитывает окружение:

  • масштаб карты
  • соседние объекты
  • плотность элементов

Стили слоев как декларация смысла

Каждый слой (layer) связывает данные и визуализацию. Семантическая структура слоя определяется типом:

  • fill — области и зоны
  • line — линейные структуры
  • circle — точечные данные
  • symbol — текст и иконки

Пример символического слоя:

{
  id: 'cities',
  type: 'symbol',
  source: 'cities-data',
  layout: {
    'text-field': ['get', 'name']
  }
}

Поле text-field напрямую связывает семантическое значение с визуальной подписью.


Feature-state как динамическая семантика

Feature-state позволяет изменять визуализацию без модификации исходных данных.

map.setFeatureState(
  { source: 'places', id: 42 },
  { hover: true }
)

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

  • выделение объекта
  • активное взаимодействие
  • временные состояния

Фильтрация как семантическое извлечение

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

filter: ['==', ['get', 'category'], 'restaurant']

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


Масштаб как параметр семантической значимости

Zoom-фактор влияет на то, какие данные считаются релевантными.

'text-size': [
  'interpolate',
  ['linear'],
  ['zoom'],
  5, 10,
  15, 20
]

На разных уровнях масштаба одна и та же сущность может менять форму представления, что формирует иерархию значимости.


Семантика текстовых слоёв

Текстовые слои являются наиболее прямым выражением семантики, поскольку отображают смысловые атрибуты объектов.

Локализация и мультиязычность

'text-field': ['coalesce',
  ['get', 'name_ru'],
  ['get', 'name_en']
]

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


Контекстная адаптация отображения

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

  • ночной режим карты
  • плотность объектов
  • конфликт подписей

Пример управления видимостью:

'text-opacity': [
  'step',
  ['zoom'],
  0,
  10, 1
]

Семантика взаимодействия пользователя с объектами

Объекты карты становятся интерактивными сущностями, а не статическими элементами.

Hover-состояния

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

Клик как семантическое раскрытие

Клик по объекту инициирует извлечение дополнительной информации, связанной с его атрибутами.


Композиция слоёв как семантическая иерархия

Порядок слоёв формирует смысловую структуру карты:

  • базовые слои (фон, рельеф)
  • функциональные слои (дороги, границы)
  • информационные слои (POI, подписи)

Семантическая нагрузка увеличивается по мере подъёма по стеку слоёв.


Динамическая генерация семантики через данные

При подключении источников данных карта перестаёт быть статической визуализацией и превращается в систему отображения состояния:

  • обновление данных в реальном времени
  • потоковые источники
  • агрегированные метрики

Каждый новый объект автоматически наследует правила семантической интерпретации, заданные стилем.


Разделение данных и представления

Ключевой принцип семантической разметки заключается в строгом разделении:

  • данные описывают объект
  • стиль описывает способ интерпретации
  • выражения связывают оба уровня

Это позволяет использовать одни и те же данные в разных визуальных контекстах без дублирования.


Семантические паттерны масштабируемых картографических систем

При росте объёма данных семантическая модель становится критически важной:

  • минимизация ручной стилизации
  • переиспользование выражений
  • унификация атрибутов
  • стандартизация категорий объектов

Mapbox GL JS обеспечивает этот уровень через декларативную систему стилей и вычисляемых выражений.