Isochrone API
Isochrone API позволяет получить область на карте, которая достижима от указанной точки за указанное время пешком, на автомобиле или велосипеде.
Isochrone API можно использовать для отображения области курьерской доставки в зависимости от времени доставки и типа движения.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2GIS isochrone API</title>
<meta name="description" content="Several destination points example" />
<style>
html,
body,
#container {
margin: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
select {
border: 0;
padding: 4px 10px;
font-size: 13px;
box-shadow: 0 1px 3px 0 rgba(38, 38, 38, 0.5);
border-radius: 4px;
}
</style>
</head>
<body>
<div id="container"></div>
<div id="tooltip"></div>
<script src="https://mapgl.2gis.com/api/js/v1"></script>
<script>
const reqUrl = `https://routing.api.2gis.com/get_hull?key=Your directions API access key`;
const start = {
lat: 55.76259,
lon: 37.668598,
};
const map = new mapgl.Map('container', {
center: [start.lon, start.lat],
zoom: 11,
key: 'Your API access key',
});
const controlsHtml = `<div class="controls">
<select name="reverse">
<option value="to">Go here</option>
<option value="from" selected>Go from here</option>
</select>
<select name="transport">
<option value="walking">on foot</option>
<option value="driving" selected>by car</option>
</select>
<select name="duration">
<option value="600" selected>10 min</option>
<option value="1200">20 min</option>
</select>
</div>`;
new mapgl.Control(map, controlsHtml, {
position: 'topLeft',
});
const reverseSelectEl = document.querySelector('select[name="reverse"]');
const transportSelectEl = document.querySelector('select[name="transport"]');
const durationSelectEl = document.querySelector('select[name="duration"]');
const startMarker = new mapgl.Marker(map, {
coordinates: [start.lon, start.lat],
});
let polyline;
function renderGeometries(geometries) {
if (polyline) {
polyline.destroy();
}
polyline = new mapgl.Polyline(map, {
coordinates: geometries.map((item) => [item.lon, item.lat]),
width: 2,
color: '#00b7ff',
});
}
window.addEventListener('change', (evt) => {
if (evt.target.name === 'reverse' || evt.target.name === 'transport' || evt.target.name === 'duration') {
updateGeometries();
}
});
updateGeometries();
function updateGeometries() {
const reverse = reverseSelectEl.value === 'to';
const transport = transportSelectEl.value;
const duration = Number(durationSelectEl.value);
fetch(reqUrl, {
method: 'POST',
body: JSON.stringify({
start,
durations: [duration],
transport,
reverse,
start_time: new Date().toISOString(),
}),
})
.then((res) => res.json())
.then((parsed) => renderGeometries(parsed.geometries[0].points))
.catch((err) => console.error('error', err));
}
</script>
</body>
</html>
Получение ключа доступа
Чтобы работать с API сервиса, нужно получить ключ доступа:
- Зарегистрируйтесь в личном кабинете Platform Manager.
- Создайте демо-ключ или купите ключ для доступа к API: см. инструкцию Ключи доступа.
Работать с ключами можно в личном кабинете Platform Manager: подробнее см. в разделе Platform Manager.
Пример запроса
Чтобы получить данные о достижимой области, нужно отправить POST-запрос на endpoint /get_hull
. В строке запроса укажите ваш ключ API в качестве значения параметра key
.
https://routing.api.2gis.com/get_hull?key=YOUR_KEY
Координаты начальной точки, время на дорогу, тип движения и другие параметры нужно передать в виде JSON в теле запроса.
Например, чтобы получить область карты, до точек которой можно добраться пешком за 10 и 20 минут, можно отправить следующий запрос:
curl --request POST \
--url 'https://routing.api.2gis.com/get_hull?key=API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"start": {
"lat": 55.028268092578884,
"lon": 82.91853904724123
},
"durations": [600, 1200],
"transport": "walking"
}'
Параметр start
содержит координаты начальной точки (широту и долготу), параметр durations
содержит массив отрезков времени, за которые нужно добраться от начальной точки (600 и 1200 секунд), параметр transport
указывает тип движения (пешком).
Дополнительно можно указать время начала движения, реверсивность движения (чтобы двигаться к указанной точке, а не от) и другие параметры. Полный список можно найти в Справочнике API.
Пример ответа
Запрос вернёт массив geometries
, описывающий области карты, достижимые за заданные промежутки времени. Информацию о каждом поле можно посмотреть в Справочнике API.
{
"generation_time": 0.117,
"geometries": [
{
"attract_points": [...],
"duration": 600,
"points": [...],
"start_point": {
"lat": 55.028268092578884,
"lon": 82.91853904724123
},
"wkt": "LINESTRING(...)"
},
{
"attract_point": [...],
"duration": 1200,
"points": [...],
"start_point": {
"lat": 55.028268092578884,
"lon": 82.91853904724123
},
"wkt": "LINESTRING(...)"
}
],
"transport": "walking",
"status": "OK"
}