Un feed di dati passo passo fornisce informazioni di sola navigazione ai dispositivi non progettati per fornire indicazioni di navigazione basate su mappe. Offre le manovre imminenti con gli elementi da te forniti:
- icone (sinistra, destra, inversione a U)
- svolta numeri nelle rotonde
- nomi di strade
- le distanze e il tempo stimati per il passaggio di navigazione successivo o per la destinazione finale
Puoi usare il feed passo passo per creare esperienze in cui l'UI completa dell'SDK di navigazione non è appropriata, ad esempio per gli schermi di piccole dimensioni. Ad esempio, puoi utilizzarlo per i passeggeri di veicoli a due ruote, in cui puoi proiettare indicazioni di sola navigazione per aiutarli a raggiungere le loro destinazioni più velocemente e con più sicurezza con distrazioni minime.
Elementi essenziali del display di navigazione
I campi principali per ogni passaggio della navigazione sono il nome completo della strada, la manovra e la distanza totale del gradino, disponibili in GMSNavigationStepInfo.
Per l'intero percorso, puoi visualizzare il tempo e la distanza rimanenti per raggiungere il passo attuale o la destinazione, tutti disponibili in GMSNavigationNavInfo. L'immagine a destra mostra un esempio di questi elementi di navigazione essenziali.
Configura un listener di eventi
Per utilizzare i dati di sola navigazione, devi implementare un listener di eventi per l'evento didChangeNavInfo
. All'interno del listener di eventi, accedi alle informazioni
su percorsi e passaggi per fornire agli utenti indicazioni stradali passo passo.
Per implementare i gestori di eventi, il controller di visualizzazione della mappa deve implementare il protocollo GMSNavigatorListener
. Per informazioni dettagliate sulla gestione degli eventi nell'SDK di navigazione per iOS, consulta la sezione Ascoltare gli eventi di navigazione.
Gestione dell'evento DidChangeNavInfo
Crea un listener per l'evento didChangeNavInfo
per aggiungere il supporto passo passo alla tua app. Nel listener di eventi, utilizza le seguenti classi ed enum per controllare la navigazione passo passo:
GMSNavigationNavInfo: classe che definisce le informazioni sullo stato della navigazione.
GMSNavigationStepInfo : classe che definisce le informazioni su un singolo passaggio di un percorso di navigazione.
GMSNavigationNavState: numerazione che definisce lo stato attuale di una navigazione, ad esempio instradamento, ricalcolo o interruzione.
GMSNavigationDrivingSide : Enum che definisce se questo passaggio prevede un percorso percorribile in auto a destra o a sinistra.
GMSNavigationManeuver: numerazione che definisce l'azione di navigazione da intraprendere, ad esempio girare a sinistra o girare a destra.
Di seguito sono riportati esempi di listener di eventi per l'evento didChangeNavInfo
:
Objective-C
// ViewController.h @interface SomeViewController () <GMSNavigatorListener> @end // ViewController.m @implementation SomeViewController // Some initialization code. ... { ... [_mapView.navigator addListener:self]; ... } #pragma mark GMSNavigatorListener - (void)navigator:(GMSNavigator *)navigator didUpdateNavInfo:(GMSNavigationNavInfo *)navInfo { // Get the current step information if (navInfo.navState == GMSNavigationNavStateEnroute) { GMSNavigationStepInfo *currentStep = navInfo.currentStep; if (currentStep) { ... roadNameLabel.text = currentStep.simpleRoadName; ... } } ... }
Swift
// ViewController.swift class SomeViewController: UIViewController { ... mapView.navigator?.add(self); ... } extension SomeViewController: GMSNavigatorListener { func navigator(_ navigator: GMSNavigator, didUpdateNavInfo navInfo: GMSNavigationNavInfo) { // Get the current step information if navInfo.navState == .enroute { if let currentStep = navInfo.currentStep { ... roadNameLabel.text = currentStep.simpleRoadName ... } } } }
Stati di navigazione
Utilizza la proprietà navState
di GMSNavigationNavInfo per ottenere lo stato di navigazione attuale, che è uno dei seguenti:
Instrada: lo stato
GMSNavigationNavStateEnroute
indica che la navigazione guidata è attualmente attiva e l'utente si trova sul percorso fornito. Sono disponibili informazioni sull'attuale passaggio della manovra imminente.Ricalcolo percorso:
GMSNavigationNavStateRerouting
indica che la navigazione è in corso, ma il navigatore sta cercando un nuovo percorso. Il passo della manovra non è disponibile, perché non c'è ancora un nuovo percorso.Arrestata:
GMSNavigationNavStateStopped
significa che la navigazione è terminata. Ad esempio, la navigazione si interrompe quando l'utente esce dalla navigazione nell'app. Nell'app di esempio, uno statoGMSNavigationNavStateStopped
cancella la visualizzazione delle informazioni di navigazione per impedire la visualizzazione delle istruzioni dei passaggi in sospeso.
Creare icone per le manovre
L'enum GMSNavigationManeuver definisce ogni possibile manovra che potrebbe verificarsi durante la navigazione e puoi ottenere la manovra per un determinato passaggio dalla proprietà maneuver
di GMSNavigationStepInfo.
Devi creare icone di manovra e associarle alle manovre associate.
Per alcune manovre, puoi configurare una mappatura one-to-one su un'icona, ad esempio
GMSNavigationManeuverDestinationLeft
e GMSNavigationManeuverDestinationRight
.
Tuttavia, poiché alcune manovre condividono caratteristiche con altri mezzi, potresti voler mappare più di una manovra a una singola icona. Ad esempio, GMSNavigationManeuverTurnLeft
e
GMSNavigationManeuverOnRampLeft
potrebbero essere mappati entrambi all'icona di svolta a sinistra.
Alcune manovre contengono un'etichetta aggiuntiva "In senso orario" o "Controorario", che l'SDK determina in base al lato di guida di un paese. Ad esempio, nei paesi in cui la guida si trova sul lato sinistro della strada, gli automobilisti fanno una rotatoria o un'inversione a U in senso orario, mentre nei paesi in cui si fa a destra si muove in senso antiorario. L'SDK di navigazione rileva se una manovra avviene nel traffico sul lato sinistro o sul lato destro e genera la manovra appropriata. Di conseguenza, l'icona della manovra potrebbe essere diversa per una manovra in senso orario o antiorario.
Espandi per vedere esempi di icone per diverse manovre
Icona di esempio | Manovra passo passo |
---|---|
DEPART UNKNOWN |
|
STRAIGHT ON_RAMP_UNSPECIFIED OFF_RAMP_UNSPECIFIED NAME_CHANGE
|
|
TURN_RIGHT ON_RAMP_RIGHT
|
|
TURN_LEFT ON_RAMP_LEFT
|
|
TURN_SLIGHT_RIGHT ON_RAMP_SLIGHT_RIGHT OFF_RAMP_SLIGHT_RIGHT
|
|
TURN_SLIGHT_LEFT ON_RAMP_SLIGHT_LEFT OFF_RAMP_SLIGHT_LEFT
|
|
TURN_SHARP_RIGHT ON_RAMP_SHARP_RIGHT OFF_RAMP_SHARP_RIGHT
|
|
TURN_SHARP_LEFT ON_RAMP_SHARP_LEFT OFF_RAMP_SHARP_LEFT
|
|
TURN_U_TURN_COUNTERCLOCKWISE ON_RAMP_U_TURN_COUNTERCLOCKWISE OFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
|
TURN_U_TURN_CLOCKWISE ON_RAMP_U_TURN_CLOCKWISE OFF_RAMP_U_TURN_CLOCKWISE
|
|
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_STRAIGHT_CLOCKWISE
|
|
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
|
|
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_LEFT_CLOCKWISE
|
|
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
|
|
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
|
|
ROUNDABOUT_U_TURN_CLOCKWISE
|
|
ROUNDABOUT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_CLOCKWISE
|
|
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_EXIT_CLOCKWISE
|
|
MERGE_RIGHT OFF_RAMP_RIGHT
|
|
MERGE_LEFT OFF_RAMP_LEFT
|
|
FORK_RIGHT TURN_KEEP_RIGHT ON_RAMP_KEEP_RIGHT OFF_RAMP_KEEP_RIGHT
|
|
FORK_LEFT TURN_KEEP_LEFT ON_RAMP_KEEP_LEFT OFF_RAMP_KEEP_LEFT
|
|
MERGE_UNSPECIFIED
|
|
DESTINATION
|
|
DESTINATION_RIGHT
|
|
DESTINATION_LEFT
|
|
FERRY_BOAT
|
|
FERRY_TRAIN
|