Подключение Mapbox GL JS через CDN (Content Delivery Network) является самым быстрым способом начала работы с библиотекой. В этом случае все необходимые файлы загружаются с удалённых серверов, а разработчику не требуется устанавливать пакет через npm, настраивать сборщики проектов или выполнять дополнительные шаги подготовки.
CDN-подключение особенно удобно для:
После подключения браузер получает доступ ко всем классам, методам и
объектам библиотеки через глобальное пространство имён
mapboxgl.
Для полноценной работы требуется подключить два ресурса:
Без подключения CSS карта может отображаться некорректно: исчезнут элементы управления, нарушится позиционирование интерфейса, возникнут проблемы с отображением всплывающих окон и навигационных кнопок.
Стандартное подключение выглядит следующим образом:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<link
href="https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.css"
rel="stylesheet"
/>
<style>
body {
margin: 0;
}
#map {
width: 100vw;
height: 100vh;
}
</style>
</head>
<body>
<div id="map"></div>
<script src="https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.js"></script>
</body>
</html>
После загрузки страницы объект mapboxgl становится
доступным для использования в JavaScript.
В секции <head> размещается ссылка на
CSS-файл:
<link
href="https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.css"
rel="stylesheet"
/>
Этот файл отвечает за:
Перед закрывающим тегом </body> обычно
подключается основной скрипт:
<script src="https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.js"></script>
После его загрузки становятся доступны:
mapboxgl.Map
mapboxgl.Marker
mapboxgl.Popup
mapboxgl.NavigationControl
mapboxgl.GeolocateControl
и другие компоненты библиотеки.
Mapbox GL JS отображает карту внутри HTML-элемента.
Наиболее распространённый вариант:
<div id="map"></div>
Затем контейнеру задаются размеры:
#map {
width: 100%;
height: 500px;
}
Если высота не указана, карта не будет видна, поскольку браузер создаст элемент нулевой высоты.
Частая ошибка начинающих разработчиков:
#map {
width: 100%;
}
Без свойства height карта не отображается.
Mapbox использует систему авторизации через Access Token.
Токен представляет собой строку вида:
pk.eyJ1IjoidXNlciIsImEiOiJjbG...
Он выдаётся в личном кабинете Mapbox и используется для доступа к:
Перед созданием карты токен указывается следующим образом:
mapboxgl.accessToken = 'ВАШ_ACCESS_TOKEN';
Обычно эта строка располагается перед созданием объекта карты.
После подключения библиотеки и получения токена можно создать экземпляр карты.
mapboxgl.accessToken = 'ВАШ_ACCESS_TOKEN';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12',
center: [37.6176, 55.7558],
zoom: 10
});
В результате в контейнере появится интерактивная карта.
Основной класс библиотеки:
new mapboxgl.Map(options)
Объект настроек может содержать множество параметров.
Определяет контейнер для отображения карты.
По идентификатору:
container: 'map'
Или по ссылке на DOM-элемент:
container: document.getElementById('map')
Указывает стиль карты.
Пример:
style: 'mapbox://styles/mapbox/streets-v12'
Популярные стили:
mapbox://styles/mapbox/streets-v12
mapbox://styles/mapbox/outdoors-v12
mapbox://styles/mapbox/light-v11
mapbox://styles/mapbox/dark-v11
mapbox://styles/mapbox/satellite-v9
mapbox://styles/mapbox/satellite-streets-v12
Определяет центр карты.
Формат:
center: [долгота, широта]
Пример:
center: [30.3141, 59.9386]
Для Санкт-Петербурга.
Уровень масштабирования.
zoom: 5
Типичные значения:
| Масштаб | Назначение |
|---|---|
| 1–3 | Континенты |
| 4–6 | Страны |
| 7–10 | Регионы |
| 11–14 | Города |
| 15–18 | Улицы |
| 19–22 | Детальный просмотр |
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<link
href="https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.css"
rel="stylesheet"
/>
<style>
html,
body {
margin: 0;
height: 100%;
}
#map {
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
<script src="https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.js"></script>
<script>
mapboxgl.accessToken = 'ВАШ_ACCESS_TOKEN';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12',
center: [37.6176, 55.7558],
zoom: 10
});
</script>
</body>
</html>
Такого шаблона достаточно для запуска большинства учебных примеров.
CDN позволяет использовать определённую версию Mapbox GL JS.
Пример:
<script src="https://api.mapbox.com/mapbox-gl-js/v3.2.0/mapbox-gl.js"></script>
И соответствующий CSS:
<link
href="https://api.mapbox.com/mapbox-gl-js/v3.2.0/mapbox-gl.css"
rel="stylesheet"
/>
Использование фиксированной версии обеспечивает:
После загрузки страницы можно убедиться, что библиотека подключена корректно.
console.log(mapboxgl);
В консоли браузера должен появиться объект библиотеки.
Также можно проверить наличие конструктора карты:
console.log(mapboxgl.Map);
Если выводится функция-конструктор, подключение выполнено успешно.
Ошибка:
An API access token is required
Причина:
mapboxgl.accessToken = '';
или строка вовсе отсутствует.
Решение — указать действительный токен Mapbox.
Подключён только Jav * aScript:
<script src="...mapbox-gl.js"></script>
В результате карта может выглядеть некорректно.
Необходимо добавить:
<link
href="...mapbox-gl.css"
rel="stylesheet"
/>
Пример ошибки:
#map {
width: 100%;
}
Правильный вариант:
#map {
width: 100%;
height: 500px;
}
HTML:
<div id="my-map"></div>
Jav * aScript:
container: 'map'
Возникает ошибка поиска элемента.
Названия должны совпадать:
container: 'my-map'
Ошибка:
<script>
const map = new mapboxgl.Map(...);
</script>
<script src="mapbox-gl.js"></script>
В этот момент объект mapboxgl ещё не существует.
Правильный порядок:
<script src="mapbox-gl.js"></script>
<script>
const map = new mapboxgl.Map(...);
</script>
Простота настройки
Не требуется установка пакетов и настройка среды разработки.
Быстрый запуск
Карта может быть отображена за несколько минут после создания HTML-файла.
Подходит для обучения
Весь код располагается в одном документе и легко анализируется.
Отсутствие сборки проекта
Не нужны Webpack, Vite, Rollup или другие инструменты сборки.
Удобство прототипирования
Можно быстро проверять идеи без создания полноценной инфраструктуры проекта.
По мере роста приложения начинают проявляться ограничения.
Вместо:
import mapboxgl from 'mapbox-gl';
используется глобальный объект:
mapboxgl
При увеличении количества файлов становится труднее управлять зависимостями и структурой кода.
Невозможно использовать возможности современных сборщиков:
Наиболее оправдано применение CDN-подключения в следующих случаях:
Для крупных приложений чаще применяется установка через пакетный менеджер и использование ES-модулей, однако понимание механизма CDN-подключения остаётся фундаментальной основой работы с Mapbox GL JS и позволяет быстро развернуть карту практически в любом HTML-документе.