Стиль в Mapbox GL JS представляет собой JSON-объект, описывающий визуальную модель карты: источники данных, слои их отображения, правила рендеринга, шрифты, спрайты и глобальные параметры сцены. Архитектурно стиль является декларативной спецификацией, которую движок Mapbox GL интерпретирует для построения WebGL-сцены.
Основой любого стиля служит строго определённая структура, соответствующая спецификации Style Specification (version 8).
Корневой объект стиля включает несколько ключевых секций:
version — версия спецификации стиляname — человекочитаемое имя стиляsources — источники пространственных данныхlayers — слои визуализацииsprite — путь к спрайтам иконокglyphs — шаблон URL для шрифтовtransition — параметры анимации измененийlight, fog, terrain —
параметры 3D-сцены (опционально)metadata — произвольные пользовательские данныеМинимально корректный стиль уже должен содержать хотя бы
version, sources и layers.
Поле version фиксирует совместимость формата:
{
"version": 8
}
Значение 8 является актуальным стандартом для Mapbox GL JS и MapLibre GL. Оно определяет доступные типы слоёв, выражений и поведение рендера.
Раздел sources определяет, откуда поступают геоданные.
Каждый источник имеет уникальный ключ и тип.
Основные типы источников:
vector — векторные тайлыraster — растровые тайлыgeojson — локальные GeoJSON-данныеimage — одиночные изображения с геопривязкойvideo — видеопотоки с геопривязкойПример структуры:
{
"sources": {
"cities": {
"type": "vector",
"url": "mapbox://examples.cities"
},
"earthquakes": {
"type": "geojson",
"data": "https://example.com/earthquakes.geojson"
}
}
}
Источник сам по себе не отображается — он становится видимым только через слой.
Секция layers определяет, как данные из источников будут
визуализированы. Каждый слой — это объект с набором свойств.
Обязательные поля слоя:
id — уникальный идентификаторtype — тип визуализацииsource — ссылка на источник данныхpaint — стилизацияlayout — поведение и размещениеДополнительно:
source-layer — слой внутри векторного тайлаfilter — фильтрация объектовminzoom / maxzoom — диапазон
видимостиПример:
{
"id": "city-points",
"type": "circle",
"source": "cities",
"paint": {
"circle-radius": 6,
"circle-color": "#ff5500"
}
}
Mapbox GL JS поддерживает фиксированный набор типов слоёв:
fill — полигоныline — линииcircle — точкиsymbol — текст и иконкиheatmap — тепловые карты плотностиfill-extrusion — 3D-экструзии зданийraster — растровые тайлыhillshade — рельефbackground — фонsky — небоКаждый тип слоя имеет собственный набор свойств paint и
layout.
Слои делятся на две логические группы свойств.
layout управляет структурой отображения:
visibility)Пример:
"layout": {
"visibility": "visible",
"text-field": "{name}",
"text-size": 12
}
paint отвечает за визуальные характеристики:
Пример:
"paint": {
"line-color": "#3b9ddd",
"line-width": 2
}
Одной из ключевых особенностей структуры стиля является поддержка выражений. Они позволяют вычислять значения динамически.
Пример условного выражения:
"circle-color": [
"case",
[">", ["get", "mag"], 5], "#ff0000",
"#00ff00"
]
Выражения могут:
case, matchЭто превращает стиль в декларативный язык программирования визуализации.
filter ограничивает набор объектов, попадающих в
слой.
Пример:
"filter": ["==", ["get", "type"], "park"]
Фильтры могут комбинироваться:
all, any,
none)==, !=, >,
<)Фильтрация выполняется до рендеринга, что влияет на производительность.
sprite задаёт базовый URL, откуда загружаются
изображения иконок:
"sprite": "mapbox://sprites/user/style-id"
Спрайт представляет собой атлас изображений, используемых в
symbol слоях. Он ускоряет отрисовку и снижает количество
запросов.
glyphs определяет шаблон URL для загрузки векторных
шрифтов:
"glyphs": "mapbox://fonts/mapbox/{fontstack}/{range}.pbf"
Шрифты разбиваются на диапазоны символов для оптимизации загрузки. Текстовые слои используют эти данные для рендеринга подписей.
transition задаёт глобальную анимацию изменения
стиля:
"transition": {
"duration": 300,
"delay": 0
}
Эти параметры применяются ко всем анимируемым свойствам (цвет, размер, прозрачность), если локально не переопределены.
Современные стили включают поддержку трёхмерной сцены.
Параметр light управляет освещением:
terrain активирует рельеф на основе DEM-данных:
"terrain": {
"source": "terrain-source",
"exaggeration": 1.5
}
fog добавляет атмосферную перспективу, создавая эффект
глубины.
Порядок массива layers определяет визуальную иерархию.
Каждый следующий слой рисуется поверх предыдущего.
Пример логики:
Неправильный порядок слоёв приводит к визуальным артефактам и перекрытию объектов.
metadata используется для хранения произвольной
информации:
"metadata": {
"theme": "dark",
"owner": "data-team"
}
Этот раздел не влияет на рендеринг и служит для интеграций и документации.
Стиль Mapbox GL JS не является статичным описанием карты. Он представляет собой композицию:
Такая структура позволяет отделить данные от визуализации и обеспечивает гибкую переконфигурацию отображения без изменения источников данных.