Mapbox GL JS активно развивается, и новые версии библиотеки иногда вводят изменения в API, стили и методы работы с картой. При переходе с более старых версий (например, v0.x–v1.x) на современные (v2.x–v3.x) важно учитывать несколько ключевых аспектов:
Лицензирование – начиная с версии 2.x, Mapbox GL JS требует токен с действующей подпиской. Это значит, что любые старые проекты на версии 1.x, использующие бесплатный ключ, могут столкнуться с ограничениями.
ESM-модули – новые версии Mapbox GL JS
распространяются как ECMAScript модули. Импорт библиотеки через
<script> с CDN остаётся возможным, но рекомендуется
переход на современный синтаксис:
import mapboxgl from 'mapbox-gl';
mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN';Совместимость CSS – стиль контейнера карты и управление слоями по-прежнему требуют подключения CSS-файла библиотеки:
<link href='https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.css' rel='stylesheet' />В новых версиях структура инициализации карты сохраняется, но добавлены новые параметры конфигурации:
const map = new mapboxgl.Map({
container: 'map', // id HTML-элемента
style: 'mapbox://styles/mapbox/streets-v12', // новый стиль
center: [37.618423, 55.751244], // долгота, широта
zoom: 10, // уровень масштабирования
projection: 'mercator', // поддержка новых проекций
antialias: true // сглаживание рендеринга
});
Ключевые изменения:
style теперь поддерживает версии стилей v12+. Старые
стили v8–v11 могут требовать обновления.projection позволяет задавать проекции,
отличные от стандартной Меркаторской.antialias улучшает визуальное качество рендеринга
3D-объектов.В Mapbox GL JS 2.x–3.x появились расширенные возможности работы с источниками данных и слоями:
Источники данных:
map.addSource('points', {
type: 'geojson',
data: 'data/points.geojson',
cluster: true,
clusterRadius: 50
});
cluster и clusterRadius позволяют
группировать объекты на карте автоматически.vector, raster,
geojson и image осталась без изменений.Слои:
map.addLayer({
id: 'point-layer',
type: 'circle',
source: 'points',
paint: {
'circle-radius': 6,
'circle-color': '#FF5722'
}
});
symbol-слоев улучшена работа с
иконками и текстом.fill-extrusion добавлена поддержка
height-transition, что позволяет анимировать высоту
3D-объектов.События карты остались совместимыми с прошлым API, но появились новые типы событий для современных слоёв и проекций:
map.on('click', 'point-layer', (e) => {
const features = map.queryRenderedFeatures(e.point, { layers: ['point-layer'] });
console.log(features);
});
mouseenter и mouseleave теперь более
плавно работают с динамическими слоями.moveend и zoomend с
расширенными параметрами, отражающими текущую проекцию.Новые версии делают анимацию камеры более гибкой:
map.flyTo({
center: [37.618423, 55.751244],
zoom: 14,
bearing: 45,
pitch: 60,
speed: 1.2, // скорость анимации
curve: 1.5 // кривизна траектории
});
speed и curve, которые
позволяют точно управлять визуальной траекторией перемещения.easeTo и jumpTo поддерживаются с
теми же аргументами, что и раньше, но теперь интегрируются с системой
плавных переходов между проекциями.Mapbox GL JS 3.x позволяет динамически изменять свойства слоёв без полной перезагрузки карты:
map.setPaintProperty('point-layer', 'circle-color', '#4CAF50');
map.setLayoutProperty('point-layer', 'visibility', 'none');
setPaintProperty и setLayoutProperty
обеспечивают мгновенное обновление визуальных характеристик.removeLayer теперь автоматически удаляет
связанные с ним источники данных, если они не используются другими
слоями.sky-layer и освещения 3D-объектов.expressions) для динамического изменения свойств
слоёв на основе данных.moveLayer, что снижает необходимость полной
перезагрузки карты при сложных стилях.style.load, tile.load и data.load
изменили сигнатуру обратного вызова.getStyle().layers
остаётся, но прямое редактирование массива слоёв больше не
рекомендуется.addImage без опций sdf и
pixelRatio может привести к неправильному отображению на
ретина-дисплеях.expressions для динамического
стилизования, избегая ручного изменения каждого свойства слоя.Миграция с Mapbox GL JS v1.x на v2.x–v3.x требует внимательного пересмотра работы с токенами, источниками данных, слоями и событиями. Использование современных функций анимации, проекций и выражений повышает гибкость и производительность карт, а соблюдение новых рекомендаций позволяет создавать интерактивные приложения с расширенными возможностями визуализации.