Um feed de dados passo a passo fornece informações somente de navegação para dispositivos não projetados para orientações de navegação baseadas em mapa. Ele fornece os elementos a seguir para as próximas manobras:
- ícones (esquerda, direita, retorno)
- virar números em rotatórias
- nomes de vias
- distâncias e tempo estimados para a próxima etapa da navegação ou destino final
Você pode usar o feed de navegação guiada para criar experiências em que a interface completa do SDK de navegação não é adequada, como para telas pequenas. Por exemplo, você pode usar esse recurso para passageiros de veículos de duas rodas, em que é possível projetar orientações somente de navegação para ajudá-los a chegar ao destino mais rápido e confiante com o mínimo de distrações.
Elementos essenciais de exibição de navegação
Os campos principais para cada etapa de navegação são o nome completo da via, a manobra e a distância total da etapa, que estão disponíveis em GMSNavigationStepInfo.
Para a viagem geral, você pode mostrar o tempo e a distância restantes até a etapa atual ou até o destino. Todos esses dados estão disponíveis em GMSNavigationNavInfo. A imagem à direita mostra um exemplo desses elementos essenciais de navegação.
Configurar um listener de eventos
Para usar dados somente de navegação, é necessário implementar um listener de eventos para o evento didChangeNavInfo
. No listener de eventos, acesse informações de viagem e etapas para fornecer navegação guiada aos usuários.
Para implementar manipuladores de eventos, o controlador de visualização do mapa precisa implementar o protocolo GMSNavigatorListener
. Para informações detalhadas sobre como processar eventos no SDK do Navigation para iOS,
consulte Detectar eventos de navegação.
Como processar o evento didChangeNavInfo
Crie um listener para o evento didChangeNavInfo
para adicionar suporte à navegação guiada ao
seu app. No listener de eventos, use as seguintes classes e tipos enumerados para controlar
a navegação guiada:
GMSNavigationNavInfo
: classe que define informações sobre o estado da navegação.GMSNavigationStepInfo
: classe que define informações sobre uma única etapa ao longo de um trajeto de navegação.GMSNavigationNavState
: tipo enumerado que define o estado atual de uma navegação, como em um trajeto, reencaminhamento ou parada.GMSNavigationDrivingSide
: tipo enumerado que define se esta etapa está em um trajeto de carro à direita ou à esquerda.GMSNavigationManeuver
: tipo enumerado que define a ação de navegação a ser realizada, como virar à esquerda ou à direita.
Veja abaixo exemplos de listeners de eventos para o evento didChangeNavInfo
:
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; ... } } ... }
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 ... } } } }
Estados de navegação
Use a propriedade navState
do GMSNavigationNavInfo
para ver o estado atual da navegação, que é um dos seguintes:
Em rota: o estado
GMSNavigationNavStateEnroute
significa que a navegação guiada está ativa no momento e que o usuário está na rota fornecida. Informações sobre a próxima etapa da manobra atual estão disponíveis.Novo trajeto:
GMSNavigationNavStateRerouting
significa que a navegação está em andamento, mas o navegador está procurando uma nova rota. A próxima etapa da manobra não está disponível porque ainda não há um novo trajeto.Interrompido:
GMSNavigationNavStateStopped
significa que a navegação terminou. Por exemplo, a navegação é interrompida quando o usuário sai da navegação no app. No app de exemplo, um estadoGMSNavigationNavStateStopped
limpa a exibição de informações de navegação para impedir que instruções de etapas restantes sejam mostradas.
Orientação de faixa
O SDK do Navigation representa as faixas no card de navegação como
objetos de dados GMSNavigationLane
e GMSNavigationLaneDirection
. Um
objeto GMSNavigationLane
representa uma faixa específica durante a navegação e tem
uma lista de objetos GMSNavigationLaneDirection
que descrevem todas as curvas que
podem ser feitas nessa faixa.
A direção recomendada que um motorista precisa seguir em uma faixa é marcada usando o campo recommended
.
Exemplo de orientação de faixa
O snippet a seguir ilustra a representação de dados das faixas mostradas na captura de tela anterior.
// 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}]
Imagens de orientação de faixa
O SDK do Navigation oferece suporte à geração de imagens de faixa para cada etapa da navegação,
conforme transmitido por GMSNavigationStepInfo
. Esses ícones se encaixam nas orientações de tamanho de
imagem do 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];
Criar ícones para manobras
O enum GMSNavigationManeuver
define cada manobra possível que pode ocorrer durante a navegação, e você
pode conferir a manobra de uma determinada etapa da propriedade maneuver
de
GMSNavigationStepInfo
.
Crie ícones de manobras e combine-os com as manobras associadas.
Em algumas manobras, é possível configurar um mapeamento de um para um para um ícone, como
GMSNavigationManeuverDestinationLeft
e
GMSNavigationManeuverDestinationRight
. No entanto, como algumas manobras compartilham
características com outras, é recomendável associar mais de uma
manobra a um único ícone. Por exemplo, GMSNavigationManeuverTurnLeft
e GMSNavigationManeuverOnRampLeft
podem ser mapeados para o ícone de virar à esquerda.
Algumas manobras contêm um rótulo extra de "sentido horário" ou "sentido horário", que o SDK determina com base no lado da direção de um país. Por exemplo, em países onde a direção é do lado esquerdo da via, os motoristas fazem uma rotatória ou retorno no sentido horário. Já os países do lado direito da via seguem no sentido anti-horário. O SDK do Navigation detecta se uma manobra ocorre no trânsito do lado esquerdo ou direito e gera a manobra apropriada. Portanto, seu ícone de manobra pode ser diferente para uma manobra no sentido horário ou anti-horário.
Clique para abrir e conferir exemplos de ícones de diferentes manobras
Ícone de exemplo | Manobras de curva a curva |
---|---|
![]() |
DEPART UNKNOWN |
![]() |
STRAIGHT ON_RAMP_UNSPECIFIED OFF_RAMP_UNSPECIFIED NAME_CHANGE
|
![]() |
TURN_RIGHT ON_RAMP_RIGHT
|
![]() |
TURN_LEFT ON_RAMP_LEFT
|
![]() |
TURN_SLIGHT_RIGHT ON_RAMP_SLIGHT_RIGHT OFF_RAMP_SLIGHT_RIGHT
|
![]() |
TURN_SLIGHT_LEFT ON_RAMP_SLIGHT_LEFT OFF_RAMP_SLIGHT_LEFT
|
![]() |
TURN_SHARP_RIGHT ON_RAMP_SHARP_RIGHT OFF_RAMP_SHARP_RIGHT
|
![]() |
TURN_SHARP_LEFT ON_RAMP_SHARP_LEFT OFF_RAMP_SHARP_LEFT
|
![]() |
TURN_U_TURN_COUNTERCLOCKWISE ON_RAMP_U_TURN_COUNTERCLOCKWISE OFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
![]() |
TURN_U_TURN_CLOCKWISE ON_RAMP_U_TURN_CLOCKWISE OFF_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_RIGHT OFF_RAMP_RIGHT
|
![]() |
MERGE_LEFT OFF_RAMP_LEFT
|
![]() |
FORK_RIGHT TURN_KEEP_RIGHT ON_RAMP_KEEP_RIGHT OFF_RAMP_KEEP_RIGHT
|
![]() |
FORK_LEFT TURN_KEEP_LEFT ON_RAMP_KEEP_LEFT OFF_RAMP_KEEP_LEFT
|
![]() |
MERGE_UNSPECIFIED
|
![]() |
DESTINATION
|
![]() |
DESTINATION_RIGHT
|
![]() |
DESTINATION_LEFT
|
![]() |
FERRY_BOAT
|
![]() |
FERRY_TRAIN
|
Usar ícones gerados
O SDK do Navigation oferece suporte à geração de ícones de manobra para um determinado
GMSNavigationStepInfo
. Esses ícones se encaixam nas orientações de tamanho
de imagem do 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];