Навигация | Isochrone API | Обзор | 2GIS Documentation

Isochrone API

Isochrone API позволяет получить область на карте, которая достижима пешком или на автомобиле за указанное время.

Может использоваться, например, для отображения точек, куда может дойти пешком или доехать на машине курьер от указанной точки за 20 минут.


Запросы осуществляются методом POST, все необходимые параметры передаются в формате JSON. Ответы формируются в формате JSON.

В запросе передаются координаты точки отправления, время в пути от точки отправления и способ передвижения. В ответ приходят координаты области. Все параметры запроса и ответа приведены в Описании 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://catalog.api.2gis.com/get_hull?key=Your directions API access key`;
            const start = {
                lat: 54.97564330524832,
                lon: 82.88566589362209,
            };

            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="mode">
                        <option value="walking">пешком</option>
                        <option value="driving" selected>на авто</option>
                    </select>
                    <select name="duration">
                        <option value="600">5 минут</option>
                        <option value="1200" selected>10 минут</option>
                    </select>
                </div>`;
            new mapgl.Control(map, controlsHtml, {
                position: 'topLeft',
            });

            const modeSelectEl = document.querySelector('select[name="mode"]');
            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 === 'mode' || evt.target.name === 'duration') {
                    updateGeometries();
                }
            });
            updateGeometries();

            function updateGeometries() {
                const mode = modeSelectEl.value;
                const duration = Number(durationSelectEl.value);

                fetch(reqUrl, {
                    method: 'POST',
                    body: JSON.stringify({
                        start,
                        durations: [duration],
                        mode,
                        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>

Данные можно получить с помощью POST-запроса на URL https://catalog.api.2gis.com/get_hull?key=YOUR_KEY и payload'а с Content-Type application/json.

В запросе используются следующие параметры:

  • key=YOUR_KEY — ваш ключ API.
{
    "start": {
        "lat": 55.028268092578884,
        "lon": 82.91853904724123
    },
    "durations": [600, 1200],
    "start_time": "2020-04-10T14:07:00Z",
    "mode": "walking"
}
{
    "generation_time": 0.04900002479553223,
    "geometries": [
        {
            "attract_points": [],
            "duration": 600,
            "points": [],
            "start_point": {},
            "wkt": "LINESTRING(...)"
        },
        {
            "attract_point": {},
            "duration": 1200,
            "points": [],
            "start_point": {},
            "wkt": "LINESTRING(...)"
        }
    ],
    "status": "OK"
}
  1. Получите ключ доступа к API. Для этого заполните анкету.
  2. Посмотрите все параметры форматов запроса и ответа