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:
Consiga um
navigationPointTokenna resposta do métodoSearchDestinationsda API Geocoding.Especifique esse
navigationPointTokenao criar umGMSNavigationWaypoint.
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.
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
locationespecificado. - O
placeIDfornece contexto que melhora a experiência de chegada. - Substituto: se o SDK determinar que o
placeIDfornecido corresponde a um recurso muito distante dolocation, ele vai ignorar oplaceID. Nesse cenário, o trajeto segue apenas para olocation, 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. |