Directions API в экосистеме Mapbox GL JS и платформы Mapbox представляет собой сервис маршрутизации, предназначенный для построения маршрутов между точками, расчёта расстояний, времени в пути и получения пошаговых инструкций. Он интегрируется как с чистыми HTTP-запросами, так и с визуализацией маршрутов на интерактивных картах.
Directions API функционирует как удалённый сервис, принимающий координаты в виде набора точек и возвращающий структурированный маршрут. Основные этапы обработки запроса:
Результат возвращается в формате JSON, где содержатся линии маршрута, сегменты, шаги и метаданные.
Directions API поддерживает несколько типов профилей, определяющих поведение алгоритма построения маршрута:
Каждый профиль использует собственную модель графа дорог и ограничения (скоростные режимы, доступность дорог, пешеходные зоны и т.д.).
Запрос к Directions API формируется через HTTP GET:
https://api.mapbox.com/directions/v5/mapbox/{profile}/{coordinates}
https://api.mapbox.com/directions/v5/mapbox/driving/37.6173,55.7558;30.3141,59.9386
?alternatives=true
&geometries=geojson
&steps=true
&access_token=YOUR_ACCESS_TOKEN
Ключевые параметры:
lon,lat;lon,latОтвет Directions API представляет собой JSON-объект с массивом маршрутов:
Каждый маршрут (route) содержит:
legs разбивают маршрут между точками и включают:
Каждый шаг содержит:
В контексте Mapbox GL JS маршруты, полученные через Directions API, обычно отображаются как GeoJSON-слой на карте.
map.on('load', () => {
map.addSource('route', {
type: 'geojson',
data: {
type: 'Feature',
geometry: {
type: 'LineString',
coordinates: []
}
}
});
map.addLayer({
id: 'route-line',
type: 'line',
source: 'route',
layout: {
'line-join': 'round',
'line-cap': 'round'
},
paint: {
'line-color': '#3b9ddd',
'line-width': 5
}
});
});
После получения ответа от API геометрия маршрута подставляется в источник:
const route = response.routes[0].geometry;
map.getSource('route').setData({
type: 'Feature',
geometry: route
});
Directions API поддерживает несколько форматов:
Используется для прямой интеграции с Mapbox GL JS:
geometries=geojson
Преимущество — отсутствие необходимости декодирования.
Компактный формат, требующий декодирования:
geometries=polyline
или
geometries=polyline6
Polyline6 обеспечивает более высокую точность.
При использовании polyline требуется преобразование в координаты:
import polyline from '@mapbox/polyline';
const coords = polyline.decode(encodedString);
После декодирования координаты преобразуются в формат
[lon, lat]:
const geojson = {
type: 'Feature',
geometry: {
type: 'LineString',
coordinates: coords.map(c => [c[1], c[0]])
}
};
При включении параметра alternatives=true API возвращает
несколько маршрутов. Это позволяет реализовать выбор маршрута по
критериям:
Пример обработки:
const routes = response.routes;
routes.forEach((route, index) => {
console.log(index, route.distance, route.duration);
});
Directions API предоставляет структурированные манёвры, которые используются в навигационных интерфейсах:
Каждый манёвр содержит координаты, что позволяет синхронизировать визуализацию с движением по маршруту.
Directions API поддерживает оптимизацию через дополнительные параметры:
Пример:
&overview=full
&steps=true
&annotations=distance,duration
Параметр annotations добавляет метаданные по сегментам
дороги.
Типичный сценарий включает:
Пример логики:
map.on('click', (e) => {
points.push([e.lngLat.lng, e.lngLat.lat]);
if (points.length >= 2) {
fetchRoute(points);
}
});
Directions API всегда используется асинхронно:
async function fetchRoute(coords) {
const query = await fetch(url);
const json = await query.json();
return json.routes[0];
}
При частых обновлениях маршрута применяется дебаунсинг для снижения нагрузки.
Directions API имеет ряд технических ограничений:
В продвинутых приложениях Directions API используется вместе с:
Комбинация этих инструментов позволяет строить полноценные навигационные системы с визуализацией маршрута в Mapbox GL JS.