Маршрутизация

MapKit SDK можно использовать для построения оптимальных маршрутов по промежуточным точкам. Маршрутизация осуществляется с учетом параметров построения маршрута и особенностей вашего транспортного средства.

Важно

Функционал построения маршрутов доступен в full-версии MapKit SDK.

Запрос построения маршрутов

  1. Создайте экземпляр класса DrivingRouter.

    val drivingRouter = DirectionsFactory.getInstance().createDrivingRouter()
    
  2. Задайте параметры построения маршрута при помощи класса DrivingOptions.

    Пример создания параметров маршрута для запроса трех маршрутов.

    val drivingOptions = DrivingOptions().apply {
        routesCount = 3
    }
    
  3. Чтобы определить параметры транспортного средства используйте класс VehicleOptions.

    val vehicleOptions = VehicleOptions()
    
  4. Создайте новую сессию построения маршрута при помощи метода DrivingRouter.requestRoutes.

    Пример запроса построения маршрута по двум точками.

    val points = buildList {
        add(RequestPoint(Point(25.196141, 55.278543), RequestPointType.WAYPOINT, null))
        add(RequestPoint(Point(25.171148, 55.238034), RequestPointType.WAYPOINT, null))
    }
    
    val drivingSession = drivingRouter.requestRoutes(
        points,
        drivingOptions,
        vehicleOptions,
        drivingRouteListener
    )
    
  5. Используйте следующий механизм для получения результатов построения маршрута.

    Создайте объект с типом интерфейса DrivingRouteListener:

    val drivingRouteListener = object : DrivingRouteListener {
        override fun onDrivingRoutes(drivingRoutes: MutableList<DrivingRoute>) {
            // Handle request routes success ...
        }
    
        override fun onDrivingRoutesError(error: Error) {
            // Handle request routes error ...
        }
    }
    

    Реализация данного интерфейса передается в качестве аргумента во все методы создания сессии построения маршрутов.

Параметры построения маршрута

Класс DrivingOptions позволяет задать следующие параметры построения маршрута:

  • initialAzimuth - задает направление движения в начальной точке маршрута, что позволяет определить, нужно ли делать разворот, и на какой полосе движется транспортное средство - на попутной или противоположной;
  • routesCount - количество альтернативных маршрутов;
  • avoidTolls - позволяет не строить маршруты по платным дорогам;
  • avoidPoorConditions - позволяет не строить маршруты по дорогам в плохом состоянии, если это возможно;
  • avoidUnpaved - позволяет избегать дорог грунтового покрытия, если это возможно;
  • departureTime - время отправления.

Параметры транспортного средства

При помощи класса VehicleOptions можно задать вид транспортного средства, на котором передвигается пользователь. Поддерживаются следующие типы VehicleType транспортных средств:

  • стандартный - легковой автомобиль;
  • грузовик;
  • мотоцикл.

Построение маршрута происходит с учетом различных особенностей выбранного транспортного средства. Для разных типов маршруты могут отличаться. Для грузового транспорта, например, маршрут будет построен с учетом указанных грузовых ограничений.

Существуют следующие виды грузовых ограничений:

  • габариты: высота, длина и ширина;
  • масса: общий вес, вес подвески, максимально допустимый вес и т.д.;
  • наличие прицепа и эко-класс транспорта.

Сессия построения маршрутов

Для создания новой сессии построения маршрутов используется метод DrivingRouter.requestRoutes. Построение маршрутов происходит по списку точек, которые передаются в качестве первого аргумента.

Точки маршрута делятся на два вида:

  1. WAYPOINT - используются для точек назначения. Например, для точек откуда, куда и точек остановок.
  2. VIAPOINT - используются для корректировки траектории маршрута. Маршрут обязательно должен быть построен через все via-точки.

В результате вызова метода построения маршрутов DrivingRouter.requestRoutes будет создана сессия запроса маршрутов. Сессия построения маршрутов представлена классом DrivingSession. Она позволяет управлять состоянием процесса запроса маршрутов при помощи следующих методов:

  • retry - перезапуск запроса построения маршрута;
  • cancel - отмена текущего запроса.

Важно

Приложение должно хранить ссылку на полученный объект DrivingSession. Иначе запрос маршрутов будет отменен.

Результаты построения маршрутов

Для получения результатов запроса построения маршрутов используется подписка на интерфейс DrivingRouteListener. Его реализация передается во время вызова метода создания сессии построения маршрута DrivingRouter.requestRoutes.

Поддерживается два типа методов-обработчиков:

  1. onDrivingRoutes - построение маршрутов прошло успешно, предоставляет список полученных маршрутов DrivingRoute.

  2. onDrivingRoutesError - оповещает о неудачном завершении построении маршрутов.

Запрос информации о маршрутах без геометрии

Кроме функционала построения маршрутов класс DrivingRouter используется для получения информации о маршрутах. Этот запрос представляет собой упрощенную версию запроса построения маршрутов. В результате него данные о геометрии маршрутов, которые при передаче по сети потребляют наибольшее количество ресурсов, не передаются. Он используется в сценариях, когда нужно построить маршрут, но отображать на карте его не требуется, например, чтобы узнать расстояние или время движения по возможным маршрутам.

При помощи метода DrivingRouter.requestRoutesrequestRoutesSummary можно получить следующую информацию о маршрутах:

  • дистанцию;
  • продолжительность по времени с учетом пробок и без;
  • список флагов Flags, которые характеризуют маршрут, например, наличие платной дороги, паромной переправы, парковки и т.д.

При помощи интерфейса DrivingSummaryListener можно получить результаты запроса сводки маршрутов. Он передается в качестве аргумента при вызове метода DrivingRouter.requestRoutesrequestRoutesSummary.

Исходный код

Подробнее с примерами использования API можно ознакомиться в map-routing демо-приложении в нашем репозитории на Github.

Следующая