Um feed de dados de navegação guiada fornece informações somente de navegação para dispositivos não projetados para orientações de navegação baseadas em mapas. Ela oferece manobras futuras com elementos que você fornece:
- ícones (esquerda, direita, retorno)
- Virar números em rotatórias
- nomes de vias
- estimativas de distância e tempo até a próxima etapa do trajeto 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 exclusivas de navegação para ajudá-los a chegar aos destinos mais rapidamente e com mais confiança, com o mínimo de distrações.
Elementos essenciais da 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, é possível 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 as informações de percursos e etapas para oferecer uma 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 lidar com 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
a fim de 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: enumeração que define o estado atual de uma navegação, como trajeto, traçado de novo trajeto ou parada.
GMSNavigationDrivingSide: tipo enumerado que define se esta etapa está em um trajeto à direita ou à esquerda.
GMSNavigationManeuver: tipo enumerado que define a ação de navegação a ser realizada, como virar à esquerda ou à direita.
Confira 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
de GMSNavigationNavInfo
para conferir o estado atual da navegação, que é um dos seguintes:
Trajeto: o estado
GMSNavigationNavStateEnroute
significa que a navegação guiada está ativa no momento e o usuário está no trajeto fornecido. Estão disponíveis informações sobre a próxima etapa da manobra atual.Reencaminhamento:
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 foi finalizada. 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 pendentes sejam mostradas.
Como criar ícones para manobras
O enum GMSNavigationManeuver
define cada manobra possível que pode ocorrer durante a navegação, e você
pode ver a manobra para uma determinada etapa com a propriedade maneuver
de
GMSNavigationStepInfo.
É necessário criar ícones de manobra e combiná-los 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 outros,
convém mapear mais de uma
manobra para um único ícone. Por exemplo, GMSNavigationManeuverTurnLeft
e GMSNavigationManeuverOnRampLeft
podem mapear para o ícone de virar à esquerda.
Algumas manobras contêm um rótulo adicional "Sentido horário" ou "Sentido horário", que o SDK determina com base no lado do motorista de um país. Por exemplo, em países em que o trânsito é do lado esquerdo da via, os motoristas fazem uma rotatória ou retorno no sentido horário, enquanto os países com o lado direito da via seguem no sentido anti-horário. O SDK do Navigation detecta se uma manobra ocorre no trânsito esquerdo ou direito e gera a manobra adequada. Portanto, seu ícone de manobra pode ser diferente para uma manobra no sentido horário ou no sentido anti-horário.
Clique para abrir ícones de exemplos de diferentes manobras
Ícone de exemplo | Manobras guiadas |
---|---|
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
|