Mapbox APIs в экосистеме Mapbox представляют собой набор сервисов, обеспечивающих работу с картографическими данными, стилями, геокодированием, маршрутизацией и векторными тайлами. В связке с Mapbox GL JS они формируют основу для построения интерактивных веб-карт нового поколения, где рендеринг выполняется на стороне клиента с использованием WebGL.
Mapbox API построен как модульная система сервисов, где каждый компонент отвечает за отдельную задачу:
Mapbox GL JS выступает клиентским рендерером, который получает данные от этих API и визуализирует их в браузере через WebGL. Вместо готовых изображений карта формируется динамически из векторных тайлов и стилей.
Ключевой принцип архитектуры — разделение данных и представления: API поставляют геоданные, а GL JS отвечает за визуализацию.
Style API управляет тем, как карта выглядит. Стиль представляет собой JSON-документ, описывающий:
Стиль в Mapbox GL JS загружается через:
map.setStyle('mapbox://styles/mapbox/streets-v12');
Стиль определяет не только визуализацию, но и структуру отображения данных. Каждый слой привязан к источнику и может быть условно активен в зависимости от zoom level.
Vector Tiles API — ключевой компонент всей системы. В отличие от растровых тайлов, векторные тайлы содержат геометрию:
Mapbox GL JS интерпретирует эти данные и рендерит их динамически. Это позволяет:
Источник подключается так:
map.addSource('cities', {
type: 'vector',
url: 'mapbox://mapbox.urban-areas'
});
Далее слой связывается с источником:
map.addLayer({
id: 'city-fill',
type: 'fill',
source: 'cities',
'source-layer': 'urban_areas',
paint: {
'fill-color': '#3bb2d0',
'fill-opacity': 0.5
}
});
Geocoding API преобразует текстовые запросы в координаты и обратно.
Прямое геокодирование:
https://api.mapbox.com/geocoding/v5/mapbox.places/Almaty.json
Ответ содержит:
Обратное геокодирование:
https://api.mapbox.com/geocoding/v5/mapbox.places/76.8865,43.2389.json
В Mapbox GL JS результаты часто используются для поиска и автодополнения интерфейсов.
Directions API строит маршруты между точками. Поддерживаются режимы:
Пример запроса:
https://api.mapbox.com/directions/v5/mapbox/driving/76.8865,43.2389;77.0150,43.3550
Ответ включает:
Маршрут может быть визуализирован в Mapbox GL JS как GeoJSON слой:
map.addSource('route', {
type: 'geojson',
data: routeGeoJSON
});
Places API предоставляет доступ к базе объектов:
Используется для поиска и автодополнения. Результаты включают:
Data API и Tilesets API используются для загрузки пользовательских данных.
Tilesets позволяют:
Процесс состоит из этапов:
mapbox:// URLВсе запросы к Mapbox API требуют access token:
mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN';
Токен определяет:
Токены можно ограничивать по:
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v11',
center: [76.8865, 43.2389],
zoom: 10
});
При инициализации происходит:
В Mapbox GL JS все визуальные элементы строятся на основе двух сущностей:
Типы источников:
Типы слоёв:
Каждый слой поддерживает:
Expressions позволяют динамически управлять стилями:
'fill-color': [
'interpolate',
['linear'],
['zoom'],
5, '#f2f0f7',
10, '#756bb1'
]
Используются для:
Mapbox GL JS предоставляет событийную модель:
Пример:
map.on('click', 'city-layer', (e) => {
console.log(e.features);
});
События позволяют:
Mapbox GL JS позволяет выполнять запросы по отрисованным данным:
map.queryRenderedFeatures(point, {
layers: ['city-fill']
});
Также доступен bounding box запрос:
map.queryRenderedFeatures(bbox);
Это используется для:
Camera API управляет положением карты:
Пример:
map.flyTo({
center: [77.0150, 43.3550],
zoom: 12,
pitch: 45,
bearing: 20
});
Режимы:
Mapbox API оптимизированы через:
Mapbox GL JS использует:
Система API ограничивает:
Эти ограничения зависят от тарифа и токена доступа.
Главная особенность Mapbox заключается в декларативном подходе:
Это разделение позволяет изменять внешний вид карты без изменения источников данных и логики приложения.