Un feed di dati passo passo fornisce informazioni di sola navigazione ai dispositivi non progettati per indicazioni di navigazione basate su mappa. Fornisce manovre future con gli elementi che fornisci:
- icone (sinistra, destra, inversione a U)
- indica i numeri delle rotatorie
- nomi di strade
- distanze stimate e tempo per il passaggio successivo della navigazione o la destinazione finale
Puoi utilizzare il feed passo passo per creare esperienze in cui l'UI completa dell'SDK di navigazione non è appropriata, ad esempio per schermi di piccole dimensioni. Ad esempio, potresti utilizzarlo per i passeggeri di veicoli a due ruote, in cui puoi creare un progetto di indicazioni di sola navigazione per aiutarli a raggiungere le loro destinazioni più velocemente e con maggiore sicurezza, con il minimo di distrazioni.
Elementi di visualizzazione di navigazione essenziali
I campi principali di ogni passaggio di navigazione sono il nome completo della strada, la manovra e la distanza totale del passaggio, disponibili in GMSNavigationStepInfo.
Per la corsa complessiva, puoi visualizzare il tempo e la distanza rimanenti fino al passaggio corrente o alla destinazione, tutti disponibili in GMSNavigationNavInfo. L'immagine a destra mostra un esempio di questi elementi di navigazione essenziali.
Configurare un listener di eventi
Per utilizzare i dati di sola navigazione, devi implementare un listener di eventi per l'evento didChangeNavInfo
. Nel listener di eventi, accedi alle informazioni
sul percorso e sui passaggi per fornire agli utenti la navigazione 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 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 classi e le enum seguenti 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 lungo un percorso di navigazione.GMSNavigationNavState
: enum che definisce lo stato attuale di una navigazione, ad esempio in corso, reinstradamento o arrestato.GMSNavigationDrivingSide
— Enum che definisce se questo passaggio si trova su un percorso con guida a destra o a sinistra.GMSNavigationManeuver
: enum che definisce l'azione di navigazione da eseguire, ad esempio gira a sinistra o gira a destra.
Di seguito sono riportati alcuni 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 attuale della navigazione, che è uno dei seguenti:
Percorso: lo stato
GMSNavigationNavStateEnroute
indica che la navigazione guidata è attualmente attiva e l'utente si trova sul percorso fornito. Sono disponibili informazioni sul passaggio attuale della manovra imminente.Cambio percorso:
GMSNavigationNavStateRerouting
significa che la navigazione è in corso, ma il navigatore sta cercando un nuovo percorso. Il passaggio successivo della manovra non è disponibile, perché non c'è ancora un nuovo percorso.Arrestato:
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 di istruzioni persistenti sui passaggi.
Indicazione delle corsie in cui posizionarsi
L'SDK di navigazione rappresenta le corsie nella scheda della svolta di navigazione come oggetti di dati GMSNavigationLane
e GMSNavigationLaneDirection
. Un oggetto GMSNavigationLane
rappresenta una corsia specifica durante la navigazione e ha un elenco di oggetti GMSNavigationLaneDirection
che descrivono tutte le svolte che è possibile effettuare da questa corsia.
La direzione consigliata per un conducente su una corsia viene indicata nel campo recommended
.
Esempio di indicazione delle corsie in cui posizionarsi
Lo snippet seguente illustra la rappresentazione dei dati delle corsie mostrate nello screenshot precedente.
// Lane 1
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 2
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 3
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false}]
// Lane 4
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false},
{/*GMSNavigationLaneShape=*/ GMSNavigationLaneShapeNormalRight, /*recommended=*/ false}]
Immagini dell'indicazione delle corsie in cui posizionarsi
L'SDK di navigazione supporta la generazione di immagini di corsie per ogni passaggio della navigazione come comunicato da GMSNavigationStepInfo
. Queste icone corrispondono alle linee guida sulle dimensioni
delle immagini di CarPlay.
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];
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 le icone delle manovre e accoppiarle alle manovre associate.
Per alcune manovre, puoi configurare una mappatura individuale a un'icona, ad esempio
GMSNavigationManeuverDestinationLeft
e
GMSNavigationManeuverDestinationRight
. Tuttavia, poiché alcune manovre hanno caratteristiche in comune con altre, potresti voler mappare più di una manovra a una singola icona. Ad esempio, GMSNavigationManeuverTurnLeft
e
GMSNavigationManeuverOnRampLeft
possono essere mappati all'icona di svolta a sinistra.
Alcune manovre contengono un'etichetta aggiuntiva "Senso orario" o "CounterClockwise", che l'SDK determina in base al lato guida di un paese. Ad esempio, nei paesi in cui la guida si trova sul lato sinistro della strada, i conducenti fanno una rotatoria o un'inversione a U in senso orario, mentre quelli a destra vanno in senso antiorario. L'SDK di navigazione rileva se si verifica una manovra nel traffico sul lato destro o sinistro e restituisce la manovra appropriata. Pertanto, l'icona della manovra potrebbe essere diversa per quella in senso orario o antiorario.
Espandi per visualizzare esempi di icone di diverse manovre
Icona di esempio | Manovre 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
|
Utilizza icone generate
L'SDK di navigazione supporta la generazione di icone di manovra per un determinato
GMSNavigationStepInfo
. Queste icone corrispondono alle linee guida sulle dimensioni
delle immagini di CarPlay.
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];