Фид данных пошаговой навигации предоставляет информацию только о навигации для устройств, не предназначенных для навигации по карте. Он предоставляет предстоящие маневры с элементами, которые вы предоставляете:
- значки (поворот налево, поворот направо, разворот);
- Поворотные номера на круговых перекрестках
- названия дорог;
- расчетное расстояние и время до следующего шага навигации или конечного пункта назначения;
Фид пошаговой навигации можно использовать, когда полный интерфейс 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];







































