Фид данных пошаговой навигации предоставляет информацию только о навигации устройствам, которые не предназначены для навигации по карте. Он предоставляет предстоящие маневры с элементами, которые вы предоставляете:
- значки (поворот налево, поворот направо, разворот);
- номера съездов на круговых перекрестках;
- названия дорог
- расчетное расстояние и время до следующего шага навигации или пункта назначения;
Фид пошаговой навигации можно использовать в тех случаях, когда полный интерфейс Navigation SDK не подходит, например на небольших экранах. Например, вы можете использовать его для водителей двухколесных транспортных средств, которым можно показывать только навигационные подсказки, чтобы помочь им быстрее и увереннее добираться до места назначения, не отвлекаясь.
Основные элементы навигации
Основные поля для каждого шага навигации – это полное название дороги, маневр и общее расстояние шага, которые доступны в GMSNavigationStepInfo.
Для поездки в целом можно показывать оставшееся время и расстояние до текущего шага или до пункта назначения. Все эти данные доступны в GMSNavigationNavInfo.
На изображении справа показан пример таких элементов навигации.
Как настроить прослушиватель событий
Чтобы использовать данные только для навигации, необходимо реализовать прослушиватель событий для события didChangeNavInfo. В прослушивателе событий получите доступ к информации о поездке и шагах, чтобы предоставить пользователям пошаговую навигацию.
Чтобы реализовать обработчики событий, контроллер представления карты должен реализовывать протокол GMSNavigatorListener. Подробную информацию об обработке событий в Navigation SDK для iOS можно найти в статье Прослушивание событий навигации.
Обработка события didChangeNavInfo
Чтобы добавить в приложение поддержку пошаговой навигации, создайте прослушиватель для события didChangeNavInfo. В прослушивателе событий используйте следующие классы и перечисления для управления пошаговой навигацией:
GMSNavigationNavInfo– класс, определяющий информацию о состоянии навигации.GMSNavigationStepInfo– класс, определяющий информацию об одном шаге на маршруте навигации.GMSNavigationNavState– перечисление, определяющее текущее состояние навигации, например "в пути", "перерасчет маршрута" или "остановлено".GMSNavigationDrivingSideПеречисление, определяющее, является ли этот шаг маршрутом с правосторонним или левосторонним движением.GMSNavigationManeuver– перечисление, определяющее навигационное действие, например поворот налево или направо.
Ниже приведены примеры прослушивателей событий для события didChangeNavInfo.
Swift
// ViewController.swift class SomeViewController: UIViewController { ... mapView.navigator?.add(self); ... } extension SomeViewController: GMSNavigatorListener { func navigator(_ navigator: GMSNavigator, didUpdateNavInfo navInfo: GMSNavigationNavInfo) { // Get the current step information if navInfo.navState == .enroute { if let currentStep = navInfo.currentStep { ... roadNameLabel.text = currentStep.simpleRoadName ... } } } }
Objective-C
// ViewController.h @interface SomeViewController () <GMSNavigatorListener> @end // ViewController.m @implementation SomeViewController // Some initialization code. ... { ... [_mapView.navigator addListener:self]; ... } #pragma mark GMSNavigatorListener - (void)navigator:(GMSNavigator *)navigator didUpdateNavInfo:(GMSNavigationNavInfo *)navInfo { // Get the current step information if (navInfo.navState == GMSNavigationNavStateEnroute) { GMSNavigationStepInfo *currentStep = navInfo.currentStep; if (currentStep) { ... roadNameLabel.text = currentStep.simpleRoadName; ... } } ... }
Статусы навигации
Чтобы получить текущее состояние навигации, используйте свойство navState объекта GMSNavigationNavInfo. Возможны следующие значения:
В пути. Состояние
GMSNavigationNavStateEnrouteозначает, что навигация активна и пользователь находится на заданном маршруте. Доступна информация о текущем предстоящем маневре.Перерасчет маршрута (
GMSNavigationNavStateRerouting) – навигация выполняется, но навигатор ищет новый маршрут. Информация о следующем маневре недоступна, поскольку новый маршрут ещё не построен.Остановлено –
GMSNavigationNavStateStoppedозначает, что навигация завершена. Например, навигация прекращается, когда пользователь выходит из нее в приложении. В примере приложения состояниеGMSNavigationNavStateStoppedочищает экран с информацией о навигации, чтобы не отображались задерживающиеся пошаговые инструкции.
выбор полосы движения;
В Navigation SDK полосы на карточке поворота представлены объектами данных GMSNavigationLane и GMSNavigationLaneDirection. Объект GMSNavigationLane представляет определенную полосу движения во время навигации и содержит список объектов GMSNavigationLaneDirection, описывающих все повороты, которые можно сделать с этой полосы.
Рекомендуемое направление движения по полосе указывается в поле recommended.

Пример подсказок по выбору полосы движения
В следующем фрагменте кода показано, как представлены данные о полосах, показанных на скриншоте выше.
// Lane 1
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 2
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 3
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false}]
// Lane 4
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false},
{/*GMSNavigationLaneShape=*/ GMSNavigationLaneShapeNormalRight, /*recommended=*/ false}]
Изображения с подсказками по выбору полосы движения
Navigation SDK поддерживает создание изображений полос для каждого шага навигации, как это передается в GMSNavigationStepInfo. Эти значки соответствуют рекомендациям по размеру изображений для CarPlay.
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];
Создание значков для маневров
![]()
Перечисление GMSNavigationManeuver определяет все возможные маневры, которые могут произойти во время навигации. Вы можете получить маневр для определенного шага из свойства maneuver объекта GMSNavigationStepInfo.
Вам нужно создать значки маневров и связать их с соответствующими маневрами.
Для некоторых маневров можно настроить сопоставление со значком, например GMSNavigationManeuverDestinationLeft и GMSNavigationManeuverDestinationRight. Однако, поскольку некоторые маневры имеют общие характеристики с другими маневрами, вы можете сопоставить несколько маневров с одним значком. Например, и GMSNavigationManeuverTurnLeft, и GMSNavigationManeuverOnRampLeft могут соответствовать значку поворота налево.
Некоторые маневры содержат дополнительную метку "По часовой стрелке" или "Против часовой стрелки", которую SDK определяет на основе стороны движения в стране. Например, в странах с левосторонним движением водители едут по кругу или разворачиваются по часовой стрелке, а в странах с правосторонним движением – против часовой стрелки. Navigation SDK определяет, происходит ли маневр в левостороннем или правостороннем движении, и выводит соответствующий маневр. Поэтому значок маневра по часовой стрелке может отличаться от значка маневра против часовой стрелки.
Развернуть, чтобы посмотреть примеры значков для разных маневров
| Пример значка | Пошаговые маневры |
|---|---|
![]() |
DEPARTUNKNOWN |
![]() |
STRAIGHTON_RAMP_UNSPECIFIEDOFF_RAMP_UNSPECIFIEDNAME_CHANGE
|
![]() |
TURN_RIGHTON_RAMP_RIGHT
|
![]() |
TURN_LEFTON_RAMP_LEFT
|
![]() |
TURN_SLIGHT_RIGHTON_RAMP_SLIGHT_RIGHTOFF_RAMP_SLIGHT_RIGHT
|
![]() |
TURN_SLIGHT_LEFTON_RAMP_SLIGHT_LEFTOFF_RAMP_SLIGHT_LEFT
|
![]() |
TURN_SHARP_RIGHTON_RAMP_SHARP_RIGHTOFF_RAMP_SHARP_RIGHT
|
![]() |
TURN_SHARP_LEFTON_RAMP_SHARP_LEFTOFF_RAMP_SHARP_LEFT
|
![]() |
TURN_U_TURN_COUNTERCLOCKWISEON_RAMP_U_TURN_COUNTERCLOCKWISEOFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
![]() |
TURN_U_TURN_CLOCKWISEON_RAMP_U_TURN_CLOCKWISEOFF_RAMP_U_TURN_CLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_RIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_STRAIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
|
![]() |
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_LEFT_CLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
|
![]() |
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_U_TURN_CLOCKWISE
|
![]() |
ROUNDABOUT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_CLOCKWISE
|
![]() |
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_EXIT_CLOCKWISE
|
![]() |
MERGE_RIGHTOFF_RAMP_RIGHT
|
![]() |
MERGE_LEFTOFF_RAMP_LEFT
|
![]() |
FORK_RIGHTTURN_KEEP_RIGHTON_RAMP_KEEP_RIGHTOFF_RAMP_KEEP_RIGHT
|
![]() |
FORK_LEFTTURN_KEEP_LEFTON_RAMP_KEEP_LEFTOFF_RAMP_KEEP_LEFT
|
![]() |
MERGE_UNSPECIFIED
|
![]() |
DESTINATION
|
![]() |
DESTINATION_RIGHT
|
![]() |
DESTINATION_LEFT
|
![]() |
FERRY_BOAT
|
![]() |
FERRY_TRAIN
|
Как использовать сгенерированные значки
Navigation SDK поддерживает создание значков маневров для заданного объекта GMSNavigationStepInfo. Эти значки соответствуют рекомендациям по размеру изображений для CarPlay.
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];







































