Un feed di dati con indicazioni stradali fornisce informazioni solo di navigazione ai dispositivi non progettati per le indicazioni stradali basate su mappe. Fornisce le manovre imminenti con gli elementi che fornisci:
- icone (sinistra, destra, inversione a U)
- numeri di svolta negli rotondi
- nomi di strade
- distanze e tempi stimati per la tappa successiva della navigazione o la destinazione finale
Puoi utilizzare il feed di indicazioni stradali per creare esperienze in cui l'interfaccia utente completa dell'SDK Navigation non è appropriata, ad esempio per i display con schermo piccolo. Ad esempio, potresti utilizzarlo per i conducenti di veicoli a due ruote, in cui puoi proiettare indicazioni di navigazione solo per aiutarli a raggiungere le loro destinazioni più velocemente e con maggiore sicurezza, con il minimo delle distrazioni.
Elementi di visualizzazione della navigazione essenziali
I campi principali per ogni passaggio di navigazione sono il nome completo della strada, la manovra e la distanza totale del passaggio, disponibili in GMSNavigationStepInfo
.
Per il viaggio complessivo, ti consigliamo di visualizzare il tempo rimanente e la distanza dal passaggio corrente o dalla destinazione, tutti disponibili in GMSNavigationNavInfo
.
L'immagine a destra mostra un esempio di questi elementi di navigazione essenziali.
Configurare un gestore di eventi
Per utilizzare i dati solo di navigazione, devi implementare un gestore eventi per l'evento didChangeNavInfo
. All'interno dell'ascoltatore di eventi, accedi alle informazioni su tragitti e passaggi per fornire ai tuoi utenti la navigazione passo passo.
Per implementare i gestori degli eventi, il controller della visualizzazione della mappa deve implementare il protocollo
GMSNavigatorListener
. Per informazioni dettagliate sulla gestione degli eventi nell'SDK Navigation per iOS, consulta Ascoltare gli eventi di navigazione.
Gestione dell'evento didChangeNavInfo
Crea un listener per l'evento didChangeNavInfo
per aggiungere il supporto della navigazione 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 lungo un percorso di navigazione.GMSNavigationNavState
- Enum che definisce lo stato corrente di una navigazione, ad esempio in viaggio, rielaborazione o fermata.GMSNavigationDrivingSide
: enumerazione che definisce se questo passaggio si trova su un percorso con guida a destra o a sinistra.GMSNavigationManeuver
: enumerazione che definisce l'azione di navigazione da eseguire, ad esempio svolta a sinistra o svolta a destra.
Di seguito sono riportati alcuni esempi di ascoltatori di eventi per l'evento didChangeNavInfo
:
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 ... } } } }
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; ... } } ... }
Stati di navigazione
Utilizza la proprietà navState
di GMSNavigationNavInfo
per ottenere lo stato corrente della navigazione, che è uno dei seguenti:
In viaggio: lo stato
GMSNavigationNavStateEnroute
indica che la navigazione guidata è attualmente attiva e che l'utente si trova sul percorso fornito. Sono disponibili informazioni sul prossimo passaggio della manovra.Ripristino del percorso:
GMSNavigationNavStateRerouting
indica che la navigazione è in corso, ma il navigatore sta cercando un nuovo percorso. Il passaggio di manovra imminente non è disponibile perché non è ancora stato definito un nuovo percorso.Interrotta:
GMSNavigationNavStateStopped
indica 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 evitare che vengano visualizzate le istruzioni dei passaggi inutilizzate.
Indicazioni sulle corsie in cui posizionarsi
L'SDK Navigation rappresenta le corsie nella scheda di svolta della navigazione come oggetti di dati GMSNavigationLane
e GMSNavigationLaneDirection
. Un
oggetto GMSNavigationLane
rappresenta una corsia specifica durante la navigazione e contiene
un elenco di oggetti GMSNavigationLaneDirection
che descrivono tutte le svolte che
possono essere effettuate da questa corsia.
La direzione consigliata per un conducente in una corsia è contrassegnata utilizzando il campo recommended
.
Esempio di indicazioni stradali
Lo snippet seguente illustra la rappresentazione dei dati delle corsie visualizzate 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 di guida nelle corsie
L'SDK Navigation supporta la generazione di immagini delle corsie per ogni passaggio di navigazione come indicato da GMSNavigationStepInfo
. Queste icone rispettano le linee guida per le 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];
Creazione di icone per le manovre
L'enum GMSNavigationManeuver
definisce ogni possibile manovra che potrebbe verificarsi durante la navigazione e puoi recuperare 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 uno a uno a un'icona, ad esempio
GMSNavigationManeuverDestinationLeft
e
GMSNavigationManeuverDestinationRight
. Tuttavia, poiché alcune manovre condividono caratteristiche con altre manovre, ti consigliamo di mappare più di una manovra a una singola icona. Ad esempio, GMSNavigationManeuverTurnLeft
e
GMSNavigationManeuverOnRampLeft
potrebbero entrambi mappare all'icona di svolta a sinistra.
Alcune manovre contengono un'etichetta aggiuntiva "In senso orario" o "In senso antiorario", che l'SDK determina in base al lato di guida di un paese. Ad esempio, nei paesi in cui si guida a sinistra, i conducenti fanno un giro a 360 gradi o un'inversione a U in senso orario, mentre nei paesi in cui si guida a destra, si girano in senso antiorario. L'SDK di navigazione rileva se una manovra si verifica nel traffico a sinistra o a destra e restituisce la manovra appropriata. Pertanto, l'icona della manovra può essere diversa per una manovra in senso orario rispetto a una in senso antiorario.
Espandi per visualizzare le icone di esempi per 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
|
Utilizzare le icone generate
L'SDK Navigation supporta la generazione di icone di manovra per un determinato
GMSNavigationStepInfo
. Queste icone rispettano le linee guida per le 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];