Rotear para pontos de navegação

O SDK Navigation para iOS oferece maneiras aprimoradas de especificar pontos de passagem ou de navegação, proporcionando rotas mais precisas 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 Destinations 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 trajeto

É possível recuperar um token de ponto de navegação pela API Geocoding, recuperar um token de rota pela API Routes e transmitir ambos para o SDK do Navigation. Isso é útil em cenários como viagens compartilhadas ou entregas, 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 do Navigation inicia a navegação no mesmo trajeto que você usou 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".

Consulte a documentação da API Routes para mais informações sobre como especificar um local usando um token de ponto de navegação e criar um token de rota. Consulte Planejar um trajeto para saber como fazer isso usando um token de trajeto.

Este diagrama mostra como um app de transporte por aplicativo ou de entrega usaria tokens de ponto de navegação e de rota juntos:

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 completa, 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 é usado como contexto para melhorar a experiência de chegada.
  • Substituto:se o SDK determinar que o placeId fornecido corresponde a um elemento muito distante do location informado, o placeId será ignorado. Nesse cenário, o trajeto vai seguir apenas para o location, e as melhorias na experiência de chegada específicas do lugar não estarão disponíveis.

Resumo das configurações válidas de waypoints

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 Trajetos até 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 destinations da solicitação da API Geocoding
Coordenadas de local e ID de lugar combinados se 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 estiver muito longe das coordenadas de latitude/longitude.