O SDK Navigation para Android oferece maneiras aprimoradas de especificar pontos de referência ou pontos de navegação, fornecendo 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 criar rotas para locais exatos 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 v7.4, era possível definir um Waypoint usando coordenadas de latitude e longitude 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 inadequados, principalmente para locais grandes, parques ou edifícios com várias entradas. O resultado pode alinhar-se ao trecho de via mais próximo, que talvez não seja o ponto de navegação mais conveniente ou correto.
As opções de ponto de referência aprimoradas resolvem isso permitindo que mais contexto seja fornecido.
Usar um token de ponto de navegação
Para ter o trajeto mais preciso até pontos de navegação específicos, como entradas, docas de carga ou áreas de coleta 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 API Geocoding na resposta. - Crie um
Waypointusando o métodosetNavigationPointToken()no builder.
Observação:ao usar setNavigationPointToken(), não é possível usar setLatLng() ou setPlaceIdString() simultaneamente. Esses métodos são mutuamente exclusivos com
setNavigationPointToken().
// Assuming 'navPointToken' is a String obtained from the destinations method of the Geocoding API
// Assuming 'destinationName' is a String title for the waypoint
Waypoint waypointWithToken = Waypoint.builder()
.setTitle(destinationName)
.setNavigationPointToken(navPointToken)
.build();
// Use this waypoint in navigator.setDestinations()
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 pela API Routes e transmitir os dois para o SDK Navigation. Isso é útil em cenários como compartilhamento de caronas 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.
O token de rota influencia 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 um trajeto para saber como fazer isso usando um token de trajeto.
Este diagrama mostra como um app de transporte por carro ou entrega usaria tokens de ponto de navegação e de rota juntos:
Combinar ID de lugar com latitude e longitude
A partir da v7.4, é possível fornecer um ID de lugar e coordenadas de latitude e longitude ao criar um Waypoint. Esse método é útil quando você quer especificar um ponto preciso (latitude/longitude) e ainda fornecer o contexto do lugar geral (ID de lugar). Isso permite que o SDK Navigation 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.
// Assuming 'placeId' is the Place ID String
// Assuming 'lat' and 'lng' are the double values for latitude and longitude
// Assuming 'destinationName' is a String title for the waypoint
Waypoint waypointWithPlaceIdAndLatLng = Waypoint.builder()
.setTitle(destinationName)
.setPlaceIdString(placeId)
.setLatLng(lat, lng)
.build();
// Use this waypoint in navigator.setDestinations()
Considerações
Quando você fornece placeId e latlng:
- A rota tem como alvo principal o
latlngespecificado. - O
placeIdé usado como contexto para melhorar a experiência de chegada. - Substituição:se o SDK determinar que o
placeIdfornecido corresponde a um recurso muito distante dolatlngespecificado, oplaceIdserá ignorado. Nesse cenário, o roteamento vai continuar apenas para olatlng, e as melhorias na experiência de chegada específicas do lugar não estarão disponíveis.
Resumo das configurações de ponto de referência válidas
| Método | setLatLng() |
setPlaceIdString() |
setNavigationPointToken() |
Comportamento de roteamento | Destaque do destino |
|---|---|---|---|---|---|
| Apenas coordenadas de latitude/longitude | set | ausente | ausente | Faz o roteamento 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 | Encaminha para o ponto de navegação padrão do ID de lugar. | Do ID de lugar |
| Apenas token de ponto de navegação | ausente | ausente | set | Cria rotas até o ponto de navegação preciso representado pelo token. | Do destino definido no método destinations original da solicitação da API Geocoding |
| Coordenadas de latitude/longitude e ID de lugar combinados | set | set | ausente | Faz o roteamento para o trecho da via 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 |