Для кого предназначено это руководство. Руководство предназначено для разработчиков мобильных приложений, которые создают пошаговую навигацию для водителей грузовиков, автобусов и других крупных коммерческих транспортных средств.
О чем это руководство. В этом руководстве рассказывается, как взять маршрут для грузовика, созданный с помощью Routes API или Route Optimization API, и использовать его для пошаговой навигации с помощью Navigation SDK для iOS.
Что вы узнаете
Вы узнаете, как:
- Используйте
routeToken, чтобы связать планирование маршрутов на сервере с навигацией в приложении. - Настройте Navigation SDK, чтобы использовать заранее спланированный маршрут для грузовика.
- Узнайте, как ограничения для грузовиков показываются водителю в интерфейсе навигации.
Требования
Прежде чем начать, убедитесь, что выполняются следующие требования:
1. Запросите доступ для своего проекта
Прокладывание маршрутов для крупногабаритного транспорта доступно ограниченному числу клиентов. Чтобы выразить заинтересованность и запросить доступ для своего облачного проекта Google Cloud, заполните форму обратной связи. Представитель Google свяжется с вами и сообщит о дальнейших действиях.
После того как Google предоставит доступ, убедитесь, что ваш проект Google Cloud настроен для прокладки маршрутов для крупногабаритного транспорта.
Если в вашей организации используются отдельные проекты Google Cloud для API маршрутизации и Navigation SDK для мобильных устройств, обратитесь в Google, чтобы подготовить каждый проект.
2. Настройте генерацию маршрутов на сервере и получите токен маршрута
Прежде чем начать навигацию на устройстве, ваш бэкенд-сервер должен сгенерировать маршрут для грузовика и получить routeToken с помощью одного из следующих API:
- Routes API – рекомендуется для расчета маршрутов отдельных грузовиков между пунктами отправления и назначения. Инструкции по настройке приведены в статье Как создавать маршруты и рассчитывать время прибытия для крупногабаритных транспортных средств.
- Route Optimization API – рекомендуется для оптимизации маршрутов с несколькими остановками для автопарка. Подробную информацию можно найти в руководстве по прокладке маршрутов для крупногабаритных транспортных средств в Route Optimization API.
В запросе к серверной части необходимо указать travelMode: TRUCK, а также физические характеристики транспортного средства (высоту, ширину, длину, вес, количество осей и наличие опасного груза). API маршрутизации возвращает в ответе routeToken, который ваш бэкенд-сервер передает мобильному приложению.
3. Соответствие минимальным требованиям к SDK и системе
В приложении должна использоваться минимально необходимая версия Navigation SDK – 5.4.0 или более поздняя.Кроме того, ваш проект должен соответствовать стандартным требованиям к настройке Navigation SDK.
Ограничения и рекомендации по работе
Прежде чем начать, ознакомьтесь со следующими ограничениями и рекомендациями:
- Географическая доступность. Прокладка маршрутов для крупногабаритных транспортных средств доступна в 48 континентальных штатах США (общая доступность) и Японии (экспериментальная версия). Она недоступна на Аляске, Гавайях и территориях США.
- Рекомендации для водителей и безопасность. Водители не должны полагаться исключительно на маршруты, предлагаемые Navigation SDK, как на безопасные или законные. Маршруты могут не подходить для транспортного средства при определенных дорожных условиях, и следование им может подвергнуть водителей опасности, например из-за низких просветов или дорог с ограничением по весу. Водители должны всегда сохранять бдительность и соблюдать дорожные знаки и местные правила.
- Маршруты, построенные по принципу наилучшего результата. Если API маршрутизации не может найти маршрут, который полностью соответствует ограничениям для транспортного средства, он возвращает маршрут, построенный по принципу наилучшего результата, который может проходить через участки с ограничениями. Например, Routes API устанавливает в ответе флаг
routeRestrictionsPartiallyIgnored. При навигации по таким маршрутам Navigation SDK показывает выноски с информацией об ограничениях. В таких случаях тщательно планируйте маршруты и не полагайтесь только на помеченный маршрут. - Неподдерживаемые функции. Прокладка маршрутов для крупногабаритного транспорта не поддерживает следующие функции:
- Стоимость платных дорог для грузовиков
- Ограничения скорости для грузовиков и тяжелых транспортных средств
- Маршруты для радиоактивных опасных материалов
- Лимиты на использование. На запросы к Navigation SDK распространяются стандартные лимиты на использование и квоты. Подробную информацию вы найдете в статье Использование и оплата.
Показ интерфейса для грузовиков (выноски маршрута)
Navigation SDK автоматически показывает на карте визуальные предупреждения, называемые выносками маршрута, чтобы предупредить водителей о предстоящих ограничениях для грузовиков. Выноски появляются для ограничений, которые действуют на запланированном маршруте, но не на других дорогах поблизости.
Navigation SDK включает выноски для следующих ограничений:
| Ограничение | Значок и текст уточнения | Условия показа |
|---|---|---|
| Высота |
Желтый – предупреждение, высота вашего транспортного средства близка к максимально допустимой.
Красный – высота вашего транспортного средства превышает максимально допустимую. |
Желтая выноска появляется, когда высота транспортного средства близка к ограничению.
Если маршрут не соответствует требованиям и нарушает ограничение по высоте, появится красная выноска.
|
| Вес |
|
Если вес автомобиля превышает ограничение, установленное для дороги, появляется красная выноска.
|
| Грузовым запрещено |
|
Если вы едете по участку дороги, на котором действуют ограничения для грузовых автомобилей, появится красная подсказка.
|
| Опасные товары |
|
Красная выноска появляется, когда перевозка опасных грузов запрещена на участке дороги.
|
Как работают токены маршрутов
routeToken – это зашифрованный снимок маршрута, созданный серверной частью маршрутизации Google. Он включает геометрию запланированного маршрута, а также физические размеры транспортного средства и профиль ограничений.
Процесс включает следующее:
- Запрос маршрута. Ваш бэкенд-сервер запрашивает маршрут для грузовика у Routes API (или Route Optimization API).
- Получение токена. Routing API рассчитывает соответствующий требованиям маршрут и возвращает
routeTokenна ваш бэкенд-сервер. - Передача токена. Бэкенд-сервер передает
routeTokenи координаты пункта назначения в мобильное приложение. - Передача в SDK. Мобильное приложение передает
routeTokenв Navigation SDK. - Запуск навигации. Navigation SDK обрабатывает все аспекты пошаговой навигации, включая отрисовку выносок маршрута и динамическое изменение маршрута в соответствии с ограничениями транспортного средства.
Динамический перерасчет и изменение маршрута
Во время активной навигации загруженность дорог, перекрытые участки или пропущенные повороты могут привести к отклонению автомобиля от запланированного маршрута.
Когда происходит перенаправление:
- Navigation SDK автоматически пересчитывает маршрут до пункта назначения.
- SDK сохраняет атрибуты и параметры транспортного средства, закодированные в исходном объекте
routeToken. - Новый маршрут не включает низкие мосты, мосты с ограничением по весу и дороги, по которым запрещено движение грузовых автомобилей.
Реализация: запуск поездки на грузовике
Чтобы инициализировать и запустить пошаговую навигацию с токеном маршрута для крупногабаритного транспорта, выполните следующие действия:
Шаг 1. Получите токен маршрута из своего бэкенда
Ваше мобильное приложение получает строку routeToken вместе с координатами пункта назначения от вашего бэкенд-сервера. Подробнее о том, как создать токен на сервере, см. в документации Routes API: Создание маршрутов для крупногабаритного транспорта и расчетного времени прибытия.
Ниже приведен пример токена маршрута.
{
"routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g"
}
Шаг 2. Укажите пункты назначения с помощью токена маршрута
Передайте routeToken в метод mapView.navigator
setDestinationsWithToken:completionHandler:. Navigation SDK получает пункты назначения из токена маршрута, а также профиль маршрутизации TRUCK, который указывает на необходимость применения ограничений для крупногабаритных транспортных средств.
Передавать путевые точки не нужно. В приложении должен быть выбран способ передвижения .driving (GMSNavigationTravelModeDriving), который используется по умолчанию, или .twoWheeler (GMSNavigationTravelModeTwoWheeler).
Задайте параметры путевых точек в запросе Routes API, который создает токен маршрута. Navigation SDK получает их из токена вместе с пунктами назначения. Для крупногабаритных транспортных средств доступны следующие варианты:
- Прокладка маршрута по стороне дороги. Крупным коммерческим автомобилям сложно разворачиваться на узких улицах. Чтобы грузовик подъехал к пункту назначения с правильной стороны дороги, задайте для параметра
sideOfRoadзначениеtrueв путевой точке пункта назначения. - Остановки. Чтобы направить грузовик в подходящее место для остановки или разгрузки, задайте для параметра
vehicleStopoverзначениеtrueв путевой точке назначения. - Точки навигации. Если в пункте назначения есть специальный въезд для грузового транспорта или погрузочная платформа, укажите их с помощью токена точки навигации.
Шаг 3. Обработайте статус маршрута и запустите ведение по маршруту
Когда Navigation SDK завершит расчет маршрута, он передаст обработчику завершения объект GMSNavigationRouteDescription. Если свойство routeStatus имеет значение .OK (GMSRouteStatusOK), задайте для свойства isGuidanceActive = true значение guidanceActive = YES, чтобы начать пошаговую навигацию.
Чтобы убедиться, что Navigation SDK применил токен маршрута, см. раздел Проверка применения токена маршрута в Navigation SDK.
Пример кода
Передайте токен маршрута в setDestinationsWithToken:completionHandler:, а затем запустите навигацию, когда статус маршрута будет .OK.
// Obtain the routeToken string from your backend
let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinationsWithToken(routeToken) { [weak self] routeDescription, error in
if routeDescription?.routeStatus == .OK {
self?.mapView.navigator?.isGuidanceActive = true
}
}
Дисплеи в автомобилях
Вы можете показывать навигацию для крупногабаритных транспортных средств на встроенных экранах с помощью Navigation for CarPlay.Дальнейшие действия
- Изменение интерфейса навигации. Настройте встроенные элементы управления пользовательского интерфейса и визуальные элементы, такие как компас, кнопка центрирования и перспектива камеры.
- Прослушивание событий навигации. Обрабатывайте обновления навигации и события жизненного цикла, такие как продвижение по маршруту, изменения расчетного времени прибытия и перенаправления.