Directions API
Воспользуйтесь Routing API, чтобы прокладывать автомобильные, грузовые, велосипедные или пешеходные маршруты через один сервис.
Directions API позволяет проложить маршрут на карте из одной точки в другую. Directions API поддерживает следующие типы маршрутов:
- автомобильный маршрут, кратчайший по времени: с учётом текущих пробок или на основе статистических данных по пробкам;
- автомобильный маршрут, кратчайший по расстоянию;
- автомобильный маршрут в объезд платных и грунтовых дорог;
- автомобильный маршрут для такси с учётом полос общественного транспорта;
- пеший маршрут с учётом пешеходных переходов и обходом препятствий;
- пеший маршрут внутри зданий с поэтажными планами;
- велосипедный маршрут с учётом пешеходных переходов и с возможностью исключения из маршрута лестниц, надземных/подземных переходов и автомобильных дорог;
- маршрут через несколько точек (до 10 точек с учётом конечной и начальной).
Для каждого маршрута Directions API может возвращать:
- информацию о высоте маршрута над уровнем моря и изменении высоты на протяжении маршрута;
- информацию о специальных точках на маршруте (например, начало платного участка дороги).
Чтобы построить маршрут для грузового транспорта, используйте Truck Directions API.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2GIS Navi API</title>
<meta name="description" content="Navi API directions example" />
<style>
html,
body,
#container {
margin: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
#reset {
padding: 4px 10px;
background: #00a81f;
border-radius: 4px;
box-shadow: 0 1px 3px 0 rgba(38, 38, 38, 0.5);
border: none;
color: #fff;
font-size: 13px;
cursor: pointer;
}
#reset:disabled {
background: #f2f2f2;
color: #6e6d6d;
cursor: default;
}
</style>
</head>
<body>
<div id="container"></div>
<script src="https://mapgl.2gis.com/api/js/v1"></script>
<script src="https://unpkg.com/@2gis/mapgl-directions@^2/dist/directions.js"></script>
<script>
const map = new mapgl.Map('container', {
center: [37.668598, 55.76259],
zoom: 13,
key: 'Your API access key',
});
const directions = new mapgl.Directions(map, {
// This key can be used for demo purpose only!
// You can get your own key on http://partner.api.2gis.ru/
directionsApiKey: 'Your directions API access key',
});
const markers = [];
let firstPoint;
let secondPoint;
// A current selecting point
let selecting = 'a';
const buttonText = ['Choose two points on the map', 'Reset points'];
const controlsHtml = `<button id="reset" disabled>${buttonText[0]}</button> `;
new mapgl.Control(map, controlsHtml, {
position: 'topLeft',
});
const resetButton = document.getElementById('reset');
resetButton.addEventListener('click', function() {
selecting = 'a';
firstPoint = undefined;
secondPoint = undefined;
directions.clear();
this.disabled = true;
this.textContent = buttonText[0];
});
map.on('click', (e) => {
const coords = e.lngLat;
if (selecting != 'end') {
// Just to visualize selected points, before the route is done
markers.push(
new mapgl.Marker(map, {
coordinates: coords,
icon: 'https://docs.2gis.com/img/dotMarker.svg',
}),
);
}
if (selecting === 'a') {
firstPoint = coords;
selecting = 'b';
} else if (selecting === 'b') {
secondPoint = coords;
selecting = 'end';
}
// If all points are selected — we can draw the route
if (firstPoint && secondPoint) {
directions.carRoute({
points: [firstPoint, secondPoint],
});
markers.forEach((m) => {
m.destroy();
});
resetButton.disabled = false;
resetButton.textContent = buttonText[1];
}
});
</script>
</body>
</html>
Вы также можете поработать с Directions API в песочнице внутри личного кабинета.
Получение ключа доступа
Чтобы работать с API сервиса, нужно получить ключ доступа:
- Зарегистрируйтесь в личном кабинете Platform Manager.
- Создайте демо-ключ или купите ключ для доступа к API: см. инструкцию Ключи доступа.
Работать с ключами можно в личном кабинете Platform Manager: подробнее см. в разделе Platform Manager.
Пример запроса
Чтобы проложить маршрут, нужно отправить POST-запрос на endpoint /carrouting/6.0.0/global
. В строке запроса укажите ваш ключ API в качестве значения параметра key
.
https://routing.api.2gis.com/carrouting/6.0.0/global?key=API_KEY
Координаты точек маршрута и другие параметры нужно передать в виде JSON в теле запроса.
Например, чтобы построить автомобильный маршрут из точки A в точку B с учётом текущих пробок, можно отправить следующий запрос:
curl --request POST \
--url 'https://routing.api.2gis.com/carrouting/6.0.0/global?key=API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"points": [
{
"type": "walking",
"x": 82.93057,
"y": 54.943207
},
{
"type": "walking",
"x": 82.945039,
"y": 55.033879
}
]
}'
Массив points
содержит координаты точек маршрута (x
- долгота, y
- широта). Первый элемент в массиве является точкой отправления.
Пример ответа
Запрос вернет объект, включающий длину маршрута в метрах (total_distance
), время в пути в секундах (total_duration
), список манёвров (maneuvers
) и другие поля. Информацию о каждом поле можно посмотреть в Справочнике API.
{
"query": {
"points": [
{
"type": "walking",
"x": 82.93057,
"y": 54.943207
},
{
"type": "walking",
"x": 82.945039,
"y": 55.033879
}
]
},
"result": [
{
"algorithm": "с учётом пробок",
"begin_pedestrian_path": {...},
"end_pedestrian_path": {...},
"filter_road_types": [...],
"id": "1805336109018823561",
"maneuvers": [...],
"route_id": "...",
"total_distance": 15153,
"total_duration": 2204,
"type": "carrouting",
"ui_total_distance": {},
"ui_total_duration": "36 мин",
"waypoints": [...]
}
],
"type": "result"
}