Rotear para pontos de navegação

O SDK do Navigation para iOS oferece maneiras aprimoradas de especificar pontos de passagem ou de navegação, proporcionando um trajeto mais preciso e uma melhor experiência de chegada, especialmente para destinos com várias entradas ou pontos de navegação específicos. É possível traçar rotas para locais precisos usando um navigationPointToken, que é uma string que codifica um local e um contexto de rota adicional. Também é possível combinar coordenadas de latitude e longitude com um ID de lugar para dar mais contexto.

Contexto

Antes da v10.10, era possível definir um Waypoint usando coordenadas de local ou um ID de lugar. Embora às vezes seja eficaz, o trajeto apenas para uma latitude e longitude pode levar a pontos de entrega ou retirada abaixo do ideal, principalmente para grandes locais, parques ou edifícios com várias entradas. O resultado pode ser fixado ao trecho de via mais próximo, que pode não ser o ponto de acesso mais conveniente ou correto.

As opções de waypoint avançadas resolvem isso permitindo que você forneça mais contexto.

Usar um token de ponto de navegação

Para o trajeto mais preciso até pontos de acesso específicos, como entradas, docas de carga ou áreas de retirada designadas, use um navigationPointToken.

Esse token é obtido chamando o método Destinations da API Geocoding. Ele representa um ponto de navegação específico e roteável associado a um lugar.

Para especificar um token de ponto de navegação:

  1. Consiga um navigationPointToken na resposta do método SearchDestinations da API Geocoding.

  2. Especifique esse navigationPointToken ao criar um GMSNavigationWaypoint.

Swift

// Create a waypoint using a navigation endpoint token
let waypointTwo = GMSNavigationWaypoint(
  navigationPointToken: "ChIJALijSXPhQkARHmIozCCbXsASEgkFVjYHGH6PgBFrbM7wl3..",
  title: "Sydney Opera House")

// Route to the waypoint
navigator.setDestinations([waypointTwo]) { [weak self] routeStatus in
   self?.handleRouteCallback(status: routeStatus)
}

Objective-C

GMSNavigationWaypoint *waypointTwo =
    [[GMSNavigationWaypoint alloc] initWithNavigationPointToken:@"sampleNavigationPointToken"
                                                          title:@"Sydney Opera House"];

Usar tokens de ponto de navegação e de rota

É possível recuperar um token de ponto de navegação pela API Geocoding, usá-lo em uma solicitação de API da API Routes para receber um token de trajeto e, em seguida, transmitir apenas o token de trajeto para o SDK do Navigation. O token de trajeto mantém a precisão do token de ponto de navegação. Isso é útil em cenários como transporte por aplicativo ou entrega, em que você usa a API Routes para calcular o preço de uma viagem e quer a precisão de um token de ponto de navegação.

Com o token de trajeto, o SDK de navegação inicia a navegação no mesmo trajeto usado para calcular o preço. Isso reduz o risco de rotas mais longas ou mais curtas serem usadas na viagem, o que pode criar "choques de preço".

Para mais informações sobre tokens de ponto de navegação e de rota na API Routes, consulte Especificar locais para uma rota e Receber um token de rota. Para saber como planejar um trajeto usando um token de trajeto, consulte Planejar um trajeto.

O diagrama a seguir mostra como um app de transporte por aplicativo ou de entrega usaria tokens de ponto de navegação e de rota juntos. A partir da versão 11.3, o app de motorista transmite apenas o token de trajeto para o SDK Navigation na etapa 7.

Diagrama de caso de uso de transporte por aplicativo ou entrega
Diagrama de um caso de uso de transporte por aplicativo ou entrega

Combinar ID de lugar e local

A partir da v10.10, é possível fornecer um ID de lugar e as coordenadas de local ao criar um waypoint. Esse método é útil quando você quer especificar um ponto preciso (o local) e, ao mesmo tempo, fornecer o contexto do lugar geral (o ID de lugar). Isso permite que o SDK de navegação ofereça uma experiência de chegada mais rica, destacando o edifício de destino ou mostrando pontos de interesse próximos relacionados ao ID de lugar.

Swift

// Create a waypoint using both the latlng and placeID
let waypoint = GMSNavigationWaypoint(
  location: CLLocationCoordinate2DMake(-33.85657945261524, 151.21535034203333),  
  placeID: "ChIJ3S-JXmauEmsRUcIaWtf4MzE",
  title: "Sydney Opera House")

// Route to the waypoint
navigator.setDestinations([waypoint]) { [weak self] routeStatus in
   self?.handleRouteCallback(status: routeStatus)
}

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint = [[GMSNavigationWaypoint alloc] initWithLocation:placeID:coordinate title:@"waypoint from location and placeiD"];

Considerações

Quando você fornece placeID e location:

  • A rota tem como destino principal o location especificado.
  • O placeID fornece contexto que melhora a experiência de chegada.
  • Substituto: se o SDK determinar que o placeID fornecido corresponde a um recurso muito distante do location, ele vai ignorar o placeID. Nesse cenário, o trajeto segue apenas para o location, e as melhorias na experiência de chegada específicas do lugar não estão disponíveis.

Resumo das configurações de waypoint válidas

Especificação location placeID navigationPointToken Comportamento de roteamento Destaque de destino
Somente coordenadas de local set ausente ausente Rotas para o trecho da via mais próximo das coordenadas definidas Mostrado se o destino puder ser inferido com alta confiança
Somente ID de lugar ausente set ausente Traça rotas para o ponto de navegação padrão do ID de lugar. Do ID de lugar
Somente token de ponto de navegação ausente ausente set Traça rotas para o ponto de navegação preciso representado pelo token. Do destino definido no método original de destinos da solicitação da API Geocoding
Coordenadas de local e ID de lugar combinados set set ausente Rotas para o trecho da via mais próximo das coordenadas definidas Do ID de lugar, mas não será mostrado se o ID de lugar estiver muito longe das coordenadas de latitude/longitude.