Mapbox GL JS требует наличия подключённой JavaScript-библиотеки и CSS-стилей, обеспечивающих корректное отображение карты. Основной ресурс библиотеки загружается через CDN или устанавливается через пакетный менеджер:
<link href="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css" rel="stylesheet" />
<script src="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.js"></script>
Ключевым элементом является DOM-контейнер, в котором будет отрисована карта. Он обязан иметь явно заданные размеры, иначе WebGL-контекст не сможет корректно инициализироваться:
<div id="map"></div>
<style>
#map {
width: 100%;
height: 500px;
}
</style>
Отсутствие высоты — одна из наиболее частых причин пустого экрана при инициализации карты.
Mapbox GL JS требует авторизации через access token. Он задаётся глобально через объект библиотеки:
mapboxgl.accessToken = 'pk.your_access_token_here';
Токен определяет доступ к стилям, тайлам и API сервиса. Без него создание экземпляра карты завершится ошибкой загрузки ресурсов.
Основной объект карты создаётся через конструктор
mapboxgl.Map. Именно он инициирует WebGL-рендеринг,
загрузку стиля и построение сцены:
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12',
center: [37.6173, 55.7558],
zoom: 10
});
Параметр container определяет DOM-элемент, в котором
будет размещена карта. Допускается передача ID строки или самого
DOM-узла:
container: document.getElementById('map')
style задаёт визуальное оформление карты. Это может
быть:
Пример стандартного стиля:
style: 'mapbox://styles/mapbox/light-v11'
Начальное положение камеры задаётся через center и
zoom.
Координаты центра карты передаются в формате
[долгота, широта]:
center: [73.3, 49.8]
Порядок координат строго фиксирован: сначала longitude, затем latitude.
Параметр zoom определяет уровень приближения:
zoom: 12
Малые значения показывают глобальный обзор, большие — детализацию улиц и объектов.
Mapbox GL JS предоставляет расширенные настройки положения и ориентации камеры.
Определяет поворот карты относительно севера:
bearing: 30
Устанавливает наклон камеры:
pitch: 45
Комбинация pitch и bearing используется для
создания 3D-эффекта и псевдо-объёмного восприятия сцены.
Для управления границами перемещения карты применяется
maxBounds:
maxBounds: [
[73.0, 49.0],
[74.0, 50.0]
]
Этот параметр ограничивает область панорамирования, фиксируя камеру внутри заданного прямоугольника.
Параметры minZoom и maxZoom ограничивают
допустимые уровни приближения:
minZoom: 5,
maxZoom: 18
Ограничение полезно при необходимости скрыть чрезмерную детализацию или глобальный обзор.
Отвечает за отображение атрибуции:
attributionControl: true
Определяет дублирование карты по горизонтали:
renderWorldCopies: true
При отключении глобус отображается без повторяющихся копий мира.
Синхронизирует состояние карты с URL:
hash: true
Параметры центра и масштаба отображаются в адресной строке, что упрощает сохранение состояния.
Инициализация карты не означает немедленную готовность к работе.
Стиль и тайлы загружаются асинхронно, поэтому используется событие
load:
map.on('load', () => {
map.addLayer({
id: 'points',
type: 'circle',
source: {
type: 'geojson',
data: {
type: 'FeatureCollection',
features: []
}
},
paint: {
'circle-radius': 6,
'circle-color': '#ff0000'
}
});
});
Событие load гарантирует, что стиль полностью загружен и
готов к модификации.
Освобождение ресурсов WebGL выполняется через метод
remove:
map.remove();
Удаление карты критично при работе в SPA-архитектуре, где компоненты создаются и уничтожаются динамически. Игнорирование этого шага приводит к утечкам памяти и зависанию GPU-контекста.
В одном приложении может существовать несколько экземпляров карты, однако каждый должен иметь уникальный контейнер:
const mapA = new mapboxgl.Map({
container: 'mapA',
style: 'mapbox://styles/mapbox/streets-v12'
});
const mapB = new mapboxgl.Map({
container: 'mapB',
style: 'mapbox://styles/mapbox/dark-v11'
});
Каждый экземпляр изолирует собственный WebGL-контекст, стиль и состояние камеры.
Частые проблемы связаны не с API, а с окружением:
loadremoveКорректная последовательность инициализации и контроль жизненного цикла объекта карты критичны для стабильной работы WebGL-рендеринга.