Modifica delle preferenze di routing

I calcoli del percorso (incluso il ricalcolo) restituiscono il percorso che richiede il minor tempo di navigazione come miglior percorso predefinito. Tuttavia, puoi modificare la strategia di routing in modo che venga restituito l'itinerario più breve tra le alternative.

Il termine più breve indica il percorso più breve tra i percorsi ottimali in base al nostro modello di costo predefinito. Il percorso più breve potrebbe non essere il percorso più breve assoluto, poiché questa opzione potrebbe essere una scarsa alternativa. Ad esempio, se il percorso più breve in assoluto è di 10 km e richiede 50 minuti per essere percorso e un altro percorso è di 15 km, ma richiede solo 20 minuti, la seconda scelta è ottimale, perché impiegare 30 minuti per ridurre di 5 km non è un buon compromesso.

Una volta impostata la strategia di routing per un viaggio, questa non cambierà fino al completamento del viaggio. Per modificare la strategia di routing per un viaggio esistente, devi cancellare le destinazioni e reimpostarle con la nuova strategia di routing.

Recupero dei dettagli della route

Per determinare quale strategia di percorso è la scelta ottimale per un determinato waypoint, chiama getRouteInfo() per ottenere i dettagli del percorso sia per il miglior percorso predefinito sia per il percorso più breve assoluto. I dettagli includono la durata e la distanza da un waypoint di destinazione.

Questi dettagli provengono da RouteInfo e vengono restituiti in un ListenableResultFuture.

Esempio

Il seguente esempio di codice mostra come ottenere i dettagli del percorso per ciascuna delle due strategie di routing.

ListenableResultFuture<RouteInfo> routeInfoFuture =
        navigator.getRouteInfo(waypoint, routingOptions);

Impostazione della strategia di routing

Puoi configurare la strategia di routing impostando RoutingOptions.routingStrategy quando chiami setDestinations().

RoutingOptions.routingStrategy accetta uno dei seguenti valori di enumerazione:

Valore di enumerazioneDescrizione
RoutingStrategy.DEFAULT_BEST Classifica i percorsi in base al modello di costo predefinito dell'SDK Navigation. Questa è la strategia di routing predefinita.
RoutingStrategy.SHORTER Ordina i percorsi in base alla distanza. Il percorso con il ranking più alto è il più breve tra quelli restituiti.

Esempio

Il seguente esempio di codice mostra come impostare la preferenza per l'itinerario più breve.

RoutingOptions routingOptions = new RoutingOptions();
routingOptions.routingStrategy(RoutingStrategy.SHORTER);
navigator.setDestinations(destinations, routingOptions, displayOptions);

Percorsi che includono traghetti

Per impostazione predefinita, NavSDK esclude i percorsi che includono traghetti. Se preferisci includere le opzioni di traghetto nei tuoi percorsi, puoi modificare questa preferenza di routing per mostrare il viaggio ai segmenti di traghetto impostando avoidFerries su false.

Esempio

RoutingOptions routingOptions = new RoutingOptions().avoidFerries(true);
// Add additional routing preferences
navigator.setDestination(destination, routingOptions);

Formato del callout del percorso

Nella preferenza per il percorso più breve, i callout lungo il percorso mostrano i dettagli della distanza. ma puoi utilizzare i callout ETA.

Configurazione del formato del callout dell'itinerario

Puoi modificare il formato del callout dell'itinerario chiamando setRouteCalloutInfoFormat in NavigationView (o in NavigationFragment). setRouteCalloutInfoFormat accetta uno dei seguenti valori di enumerazione:

Valore di enumerazioneDescrizione
RouteCalloutInfoFormat.DEFAULT Mostra il tempo rimanente quando utilizzi la strategia di routing del percorso migliore predefinita. Mostra la distanza rimanente quando si utilizza la strategia di routing del percorso più breve.
RouteCalloutInfoFormat.TIME Visualizza il tempo rimanente.
RouteCalloutInfoFormat.DISTANCE Mostra la distanza rimanente.

Esempio

Il seguente esempio di codice mostra come configurare il formato del callout dell'itinerario.

mNavFragment.setRouteCalloutInfoFormat(RouteCalloutInfoFormat.TIME);