O SDK Navigation para iOS oferece maneiras aprimoradas de especificar waypoints ou pontos de navegação, proporcionando um roteamento 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 fazer o trajeto até locais precisos usando um navigationPointToken, que é uma string que codifica um local e um contexto de rota adicional. Você também pode combinar coordenadas de latitude e longitude com um ID de lugar para adicionar contexto.
Contexto
Antes da versão 10.10, era possível definir um Waypoint usando coordenadas de local ou um ID de lugar. Embora às vezes seja eficaz, o roteamento apenas para uma latitude e longitude pode levar a pontos de desembarque ou embarque abaixo do ideal, principalmente para locais grandes, parques ou edifícios com várias entradas. O resultado pode ser alinhado ao segmento de estrada mais próximo, que talvez não seja o ponto de acesso mais conveniente ou correto.
As opções de waypoint aprimoradas resolvem esse problema, permitindo que você forneça mais contexto.
Usar um token de ponto de navegação
Para o roteamento mais preciso a pontos de acesso específicos, como entradas, docas de carregamento ou áreas de embarque 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:
Receba um
navigationPointTokendo método Destinations da resposta da API Geocoding.Especifique esse
navigationPointTokenao criar umGMSNavigationWaypoint.
Observação:não é possível especificar um token de ponto de navegação simultaneamente com um local e um PlaceID.
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] initWithNavigationPointToek:@"sampleNavigationPointToken"
Usar tokens de ponto de navegação e de rota
É possível recuperar um token de ponto de navegação pela API Geocoding, um token de rota da API Routes e, em seguida, transmitir o token de ponto de navegação e o token de rota para o SDK Navigation. 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.
O token de rota favorece a rota escolhida pelo SDK Navigation para a rota usada para preços. Isso reduz o risco de rotas mais longas ou mais curtas serem usadas para a viagem, o que pode criar "choques de preços".
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 uma rota" para saber como planejar uma rota usando um token de rota.
Este diagrama mostra como um app de transporte por aplicativo ou entrega usaria tokens de ponto de navegação e de rota juntos:
Combinar ID de lugar e local
A partir da versão 10.10, é possível fornecer tanto um ID de lugar quanto coordenadas de local ao criar um waypoint. Esse método é útil quando você quer especificar um ponto preciso (o local) e ainda fornecer o contexto do lugar geral (o ID de lugar). Isso permite que o SDK Navigation ofereça uma experiência de chegada mais rica, destacando o prédio 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:
Ao fornecer placeID e location:
- A rota tem como destino principal o
locationespecificado. - O
placeIdé usado como contexto para melhorar a experiência de chegada. - Fallback:se o SDK determinar que o
placeIdfornecido corresponde a um recurso muito distante dolocationfornecido, oplaceIdserá ignorado. Nesse cenário, o roteamento vai prosseguir apenas para olocation, e as melhorias na experiência de chegada específicas do lugar não estarão disponíveis.
Resumo das configurações de waypoint válidas
| Especificação | location |
placeID |
navigationPointToken |
Comportamento de roteamento | Destaque do destino |
|---|---|---|---|---|---|
| Somente coordenadas de local | set | ausente | ausente | Faz o trajeto até o segmento de estrada mais próximo das coordenadas definidas | Mostrado se o destino puder ser inferido com alta confiança |
| Somente ID de lugar | ausente | set | ausente | Faz o trajeto 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 | Faz o trajeto até o ponto de navegação preciso representado pelo token | Do destino definido no método de destinos original da solicitação da API Geocoding |
| Coordenadas de local e ID de lugar combinados | se | set | ausente | Faz o trajeto até o segmento de estrada mais próximo das coordenadas definidas | Do ID de lugar, embora não seja mostrado se o ID de lugar estiver muito longe das coordenadas de latitude/longitude |