В Mapbox GL JS визуальное представление карты определяется стилем, описанным в формате Mapbox Style Specification. Стиль — это JSON-конфигурация, которая задаёт источники данных (sources), слои (layers), слои символов, типы рендеринга, шрифты, и визуальные свойства геометрии.
Каждый стиль загружается по URL вида:
mapbox://styles/mapbox/streets-v11
или через прямой JSON:
{
"version": 8,
"sources": {...},
"layers": [...]
}
При смене стиля карта полностью пересобирает граф сцены WebGL, повторно загружает тайлы и применяет новую систему слоёв.
Стиль Streets ориентирован на универсальное использование и является наиболее детализированным из базовых наборов.
URL:
mapbox://styles/mapbox/streets-v11
В Streets используется большое количество слоёв:
road-* — дорожная сетьbuilding — 3D и 2D зданияwater — водные объектыpoi-* — точки интересаadmin — административные границыlanduse — землепользованиеКаждый слой имеет зависимости от zoom level:
"minzoom": 5,
"maxzoom": 18
Streets используется для:
mapboxgl.accessToken = 'TOKEN';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [37.6173, 55.7558],
zoom: 10
});
Outdoors оптимизирован для отображения природных и географических объектов.
URL:
mapbox://styles/mapbox/outdoors-v11
landcover — леса, растительностьcontour — линии высотhillshade — затенение рельефаwater — водные поверхности с повышенной
контрастностьюpark — природные зоныOutdoors снижает визуальный шум городской среды:
Подходит для:
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/outdoors-v11',
center: [10.0, 46.5],
zoom: 6
});
Light предназначен для визуализаций, где карта должна оставаться фоном.
URL:
mapbox://styles/mapbox/light-v10
Light часто применяется как подложка для:
Пример наложения данных:
map.addLayer({
id: 'population-heat',
type: 'heatmap',
source: 'population',
paint: {
'heatmap-intensity': 1,
'heatmap-color': [
'interpolate',
['linear'],
['heatmap-density'],
0, 'rgba(33,102,172,0)',
1, 'rgb(103,169,207)'
]
}
});
Dark — противоположность Light, оптимизированный для ночных интерфейсов и ярких данных.
URL:
mapbox://styles/mapbox/dark-v10
Dark применяется там, где важны:
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/dark-v10',
center: [2.3522, 48.8566],
zoom: 11
});
Mapbox GL JS позволяет менять стиль в рантайме:
map.setStyle('mapbox://styles/mapbox/dark-v10');
При смене стиля:
style.loadmap.on('style.load', () => {
map.addSource('custom-data', {
type: 'geojson',
data: '/data.geojson'
});
map.addLayer({
id: 'custom-layer',
type: 'circle',
source: 'custom-data',
paint: {
'circle-radius': 6,
'circle-color': '#ff0000'
}
});
});
Базовые стили Mapbox являются «живыми»: они содержат десятки предопределённых слоёв, которые можно модифицировать через:
map.setPaintProperty('road-primary', 'line-color', '#ff0000');
Однако структура слоёв зависит от выбранного стиля:
Поэтому идентификаторы слоёв необходимо проверять для каждого стиля отдельно.
Различия в стилях влияют на:
Streets генерирует наибольшую нагрузку на GPU из-за количества слоёв и объектов. Light и Dark — наиболее лёгкие для рендеринга.
Mapbox использует динамическую типографику:
В Streets типографика многослойная, в Light и Dark — сокращённая, в Outdoors — акцентирована на природных объектах.
Базовые стили часто применяются как стартовая точка:
map.setStyle('mapbox://styles/mapbox/streets-v11');
map.on('style.load', () => {
map.setPaintProperty('water', 'fill-color', '#a0c8f0');
});
Это позволяет: