Ativar feed de dados passo a passo

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

Uma tela de dispositivo móvel que mostra a próxima curva à esquerda a 30 metros na
Av. W Ahwanee. Na parte inferior da tela, o tempo restante até o destino
é de 46 minutos e a distância restante é de 39 milhas.

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
          ...
        }
      }
    }
  }

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 estado GMSNavigationNavStateStopped 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