Mapbox GL JS использует декларативную модель стилей, основанную на спецификации Mapbox Style Specification. Стиль в этой системе представляет собой структурированное описание того, как географические данные должны отображаться на карте: от источников данных до визуального представления слоёв, шрифтов, иконок и световых эффектов.
Стиль в Mapbox GL JS — это JSON-документ, который определяет внешний вид карты. Его ключевые элементы формируют единый конвейер визуализации.
8.Каждый из этих компонентов играет строго определённую роль в процессе отрисовки карты.
Раздел sources определяет, откуда карта получает данные.
Каждый источник описывается как отдельный объект с уникальным
идентификатором.
Векторные тайлы — основной формат в Mapbox GL JS. Они содержат геометрию и атрибуты.
"sources": {
"streets": {
"type": "vector",
"url": "mapbox://mapbox.mapbox-streets-v8"
}
}
Растровые тайлы представляют собой готовые изображения.
"satellite": {
"type": "raster",
"url": "mapbox://mapbox.satellite",
"tileSize": 256
}
Используется для локальных или динамических данных.
"geo-data": {
"type": "geojson",
"data": "./data.geojson"
}
Слои — центральный элемент визуализации. Каждый слой определяет, как конкретный набор данных из источника должен быть отображён.
{
"id": "road-layer",
"type": "line",
"source": "streets",
"source-layer": "road",
"paint": {
"line-color": "#ff0000",
"line-width": 2
}
}
Используется для полигонов.
Отвечает за линии: дороги, маршруты, границы.
Комбинированный слой для текста и иконок.
Отображает точки как окружности.
Используется для 3D-объектов.
Создаёт тепловые карты плотности.
Каждый слой состоит из трёх категорий свойств:
Определяет структуру отображения.
Примеры:
visibilitytext-fieldsymbol-placementОтвечает за визуальные характеристики.
Примеры:
Позволяет ограничить набор отображаемых объектов.
"filter": ["==", "class", "primary"]
Раздел glyphs определяет источник векторных шрифтов для
текста на карте.
"glyphs": "mapbox://fonts/mapbox/{fontstack}/{range}.pbf"
Шрифты загружаются по диапазонам символов, что снижает нагрузку на сеть и ускоряет рендеринг.
Спрайт — это набор иконок, объединённых в один файл изображения и индекс.
"sprite": "mapbox://sprites/mapbox/streets-v11"
Он используется слоями типа symbol для отображения
пиктограмм.
Раздел transition управляет анимацией изменений между
состояниями стиля.
"transition": {
"duration": 300,
"delay": 0
}
Эти параметры применяются ко всем свойствам, поддерживающим интерполяцию.
Порядок слоёв в массиве layers определяет их визуальную
иерархию. Слои, расположенные выше, отрисовываются поверх нижних.
Пример порядка:
Изменение порядка слоёв напрямую влияет на читаемость карты и восприятие данных.
Стиль поддерживает выражения, позволяющие изменять отображение в зависимости от масштаба, атрибутов данных и других параметров.
"line-width": [
"interpolate",
["linear"],
["zoom"],
5, 1,
10, 4
]
"circle-color": [
"case",
["==", ["get", "type"], "park"],
"#00ff00",
"#ff0000"
]
Эти механизмы позволяют создавать адаптивные стили без изменения исходных данных.
Стиль может включать настройки освещения для 3D-слоёв.
"light": {
"anchor": "viewport",
"color": "#ffffff",
"intensity": 0.5
}
Эти параметры особенно важны при работе с
fill-extrusion.
Компоненты стиля связаны между собой в строгой последовательности обработки:
sources) предоставляет данные.layers) выбирает данные через
source-layer.Рендеринг в Mapbox GL JS основан на WebGL. Каждый слой компилируется в набор GPU-инструкций.
Ключевые этапы:
Эта архитектура обеспечивает высокую производительность даже при большом количестве слоёв и сложных стилях.
Платформа Mapbox предоставляет готовые стили, такие как Streets, Outdoors и Satellite, которые построены на той же системе компонентов.
Каждый такой стиль является комбинацией источников, слоёв и визуальных параметров, оптимизированных под конкретные сценарии использования — навигацию, анализ данных или визуализацию спутниковых снимков.