Mapbox GL JS предоставляет набор предустановленных (built-in) стилей, основанных на векторных тайлах и описываемых через спецификацию Mapbox Style Specification. Эти стили представляют собой готовые визуальные конфигурации карты, включающие источники данных, слои, фильтры, слои символов и растровые тайлы, уже оптимизированные для различных сценариев отображения.
Основная идея встроенных стилей заключается в том, что разработчик может быстро переключать внешний вид карты без необходимости ручной настройки каждого слоя. При этом каждый стиль остаётся полностью переопределяемым и расширяемым.
Любой встроенный стиль Mapbox GL JS — это JSON-объект, доступный по URL вида:
mapbox://styles/mapbox/{style-id}
Внутри этот JSON включает:
При загрузке стиля библиотека автоматически:
mapbox://styles/mapbox/streets-v11
Один из наиболее универсальных стилей, предназначенный для общего использования.
Особенности:
Используется в:
mapbox://styles/mapbox/outdoors-v11
Ориентирован на природные и туристические сценарии.
Особенности:
Применяется в:
mapbox://styles/mapbox/light-v10
Минималистичный светлый стиль.
Особенности:
Используется в:
mapbox://styles/mapbox/dark-v10
Тёмная тема карты с высокой контрастностью.
Особенности:
mapbox://styles/mapbox/satellite-v9
Полностью спутниковое изображение без векторных слоёв поверх.
Особенности:
mapbox://styles/mapbox/satellite-streets-v11
Гибридный стиль: спутниковые изображения + векторные подписи.
Особенности:
Базовая инициализация карты с использованием встроенного стиля:
mapboxgl.accessToken = 'YOUR_MAPBOX_ACCESS_TOKEN';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [37.618423, 55.751244],
zoom: 10
});
Ключевой параметр style определяет визуальную
конфигурацию карты.
Mapbox GL JS позволяет менять стиль без пересоздания карты:
map.setStyle('mapbox://styles/mapbox/dark-v10');
После вызова setStyle:
После смены стиля все добавленные вручную слои и источники необходимо восстанавливать:
map.on('style.load', () => {
map.addSource('points', {
type: 'geojson',
data: '/data/points.geojson'
});
map.addLayer({
id: 'points-layer',
type: 'circle',
source: 'points',
paint: {
'circle-radius': 6,
'circle-color': '#ff0000'
}
});
});
Строка вида:
mapbox://styles/mapbox/streets-v11
распадается на:
mapbox://styles/ — протокол доступа к стилямmapbox — namespace аккаунтаstreets — идентификатор стиляv11 — версияВерсионирование критично, так как изменения стиля могут повлиять на отображение слоёв.
Встроенные стили содержат десятки и сотни слоёв. Каждый слой имеет:
idtype (fill, line, symbol, circle, raster, heatmap)sourcesource-layerpaintlayoutПример изменения слоя:
map.setPaintProperty('road-primary', 'line-color', '#ff0000');
Такой подход позволяет кастомизировать встроенный стиль без его полного переопределения.
Можно управлять видимостью объектов через фильтры:
map.setFilter('poi-label', ['==', ['get', 'class'], 'park']);
Или скрыть слой:
map.setLayoutProperty('poi-label', 'visibility', 'none');
Во встроенных стилях часто присутствуют стандартные слои:
waterlanduseroad-*buildingpoiadminЭти слои формируют базовую картографическую модель, поверх которой добавляются пользовательские данные.
При использовании встроенных стилей важно учитывать производительность:
Чрезмерное добавление кастомных слоёв поверх встроенного стиля увеличивает нагрузку на WebGL.
Фильтрация быстрее, чем создание новых слоёв для каждого типа данных.
minzoom и maxzoom{
id: 'cities',
type: 'symbol',
source: 'places',
minzoom: 5,
maxzoom: 12
}
Встроенный стиль можно использовать как основу и расширять его:
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v10'
});
map.on('load', () => {
map.addLayer({
id: 'custom-layer',
type: 'circle',
source: {
type: 'geojson',
data: '/data/points.geojson'
},
paint: {
'circle-radius': 8,
'circle-color': '#3366ff'
}
});
});
Встроенные стили часто используют как основу для светлой и тёмной темы интерфейса.
Пример переключения:
function setTheme(theme) {
const styles = {
light: 'mapbox://styles/mapbox/light-v10',
dark: 'mapbox://styles/mapbox/dark-v10'
};
map.setStyle(styles[theme]);
}
Mapbox GL JS использует кеширование:
Однако при вызове setStyle кеш слоёв сбрасывается, так
как структура рендера пересобирается.
Встроенный стиль не ограничивает добавление пользовательских источников:
map.addSource('custom-data', {
type: 'vector',
url: 'mapbox://examples.8fgz4egr'
});
Далее можно интегрировать слой в существующую стилизацию.
Изменение визуального стиля дорог:
map.setPaintProperty('road-street', 'line-color', '#00ffcc');
map.setPaintProperty('road-street', 'line-width', 2);
Изменение прозрачности зданий:
map.setPaintProperty('building', 'fill-opacity', 0.3);
Разные версии (v9, v10, v11) могут отличаться:
Обновление версии стиля требует проверки совместимости кастомных слоёв.
Встроенные стили выступают базовым визуальным слоем, на который накладывается бизнес-логика:
Они позволяют разделить: