Utilizza questa guida per consentire alla tua app di ascoltare e rispondere a una serie di eventi che cambiano quando un utente naviga lungo un percorso. Questa guida non tratta la definizione di un percorso, ma solo la risposta agli eventi lungo il percorso.
Panoramica
L'SDK di navigazione per iOS fornisce listener associati alla posizione dell'utente e alle condizioni lungo il percorso, nonché dati importanti su tempo e distanza. Sul controller di visualizzazione della mappa, la tua app
deve adottare i protocolli per questi listener:
GMSRoadSnappedLocationProviderListener
e
GMSNavigatorListener
.
Questo elenco mostra i metodi listener disponibili per gli eventi di navigazione:
GMSNavigatorListener.didArriveAtWaypoint
, attivato quando viene raggiunta una destinazione.GMSNavigatorListener.navigatorDidChangeRoute
, attivato quando il percorso viene modificato.GMSNavigatorListener.didUpdateRemainingTime
, chiamato ripetutamente quando cambia il tempo per passare alla destinazione successiva, mentre le linee guida sono attive.GMSNavigatorListener.didUpdateRemainingDistance
, chiamato ripetutamente quando cambia la distanza dalla destinazione successiva, mentre le linee guida sono attive.GMSNavigatorListener.didUpdateDelayCategory
, effettuato una chiamata quando la categoria di ritardo alla destinazione successiva cambia, mentre le linee guida sono attive.GMSNavigatorListener.didChangeSuggestedLightingMode
, si attiva quando vengono aggiornate le condizioni di illuminazione stimate. Ad esempio, quando cala la notte nella località in cui si trova l'utente, l'illuminazione cambia.GMSNavigatorListener.didUpdateSpeedingPercentage
, che si attiva quando il conducente supera il limite di velocità.GMSRoadSnappedLocationProviderListener.didUpdateLocation
, effettuato ripetutamente la chiamata quando la località dell'utente cambia.
Visualizza il codice
Dichiarazione di conformità ai protocolli richiesti
Prima di implementare i metodi di navigazione, il controller di visualizzazione deve adottare i protocolli:
Swift
class ViewController: UIViewController, GMSNavigatorListener, GMSRoadSnappedLocationProviderListener {
Objective-C
@interface ViewController () <gmsnavigatorlistener, gmsroadsnappedlocationproviderlistener=""></gmsnavigatorlistener,>
@fine
Dopo aver adottato i protocolli di navigazione, imposta i listener come controller di visualizzazione. Ad esempio, puoi aggiungere il seguente codice al metodo viewDidLoad()
.
Swift
mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)
Objective-C
[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider addListener:self];
Ricezione o interruzione degli aggiornamenti sulla posizione
Gli aggiornamenti della posizione sono necessari per mostrare i progressi dell'utente sulla mappa.
L'istanza location
espone le seguenti proprietà:
Proprietà località | Descrizione |
---|---|
altitudine | Altitudine attuale. |
coordinate.latitude | Coordinata della latitudine attuale allineata alla strada. |
coordinate.longitude | Coordinata della longitudine attuale allineata alla strada. |
corso | Orientamento attuale in gradi. |
velocità | Velocità attuale. |
timestamp | Data/ora della lettura corrente. |
Per ricevere aggiornamenti continui sulla posizione, chiama mapView.roadSnappedLocationProvider.startUpdatingLocation
e utilizza GMSRoadSnappedLocationProviderListener
per gestire l'evento didUpdateLocation
.
Nell'esempio seguente viene mostrata la chiamata a startUpdatingLocation
:
Swift
mapView.roadSnappedLocationProvider.startUpdatingLocation()
Objective-C
[_mapView.roadSnappedLocationProvider start accertatiLocation];
Il codice seguente crea un elemento GMSRoadSnappedLocationProviderListener
che
gestisce l'evento didUpdateLocation
.
Swift
func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider, didUpdate location: CLLocation) { print("Location: (location.description)") }
Objective-C
- (void)locationProvider:(GMSRoadSnappedLocationProvider *)locationProvider didUpdateLocation:(CLLocation *)location { NSLog(@"Location: %@", location.description); }
Per ricevere aggiornamenti sulla posizione quando l'app è in background, imposta allowsBackgroundLocationUpdates
su true:
Swift
mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true
Objective-C
_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;
Rilevamento degli eventi di arrivo
L'app utilizza l'evento didArriveAtWaypoint
per rilevare quando è stata raggiunta una destinazione. Puoi riprendere le indicazioni e passare al waypoint successivo chiamando continueToNextDestination()
, quindi riattivando le indicazioni. L'app
deve riattivare le indicazioni dopo aver chiamato il numero continueToNextDestination()
.
Dopo che l'app chiama continueToNextDestination
, il navigatore non dispone più dei dati sulla destinazione precedente. Se vuoi analizzare le informazioni su un tratto di percorso, devi recuperarle dal navigatore prima di chiamare continueToNextDestination()
.
Il seguente esempio di codice mostra un metodo per gestire l'evento didArriveAtWaypoint
:
Swift
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint: GMSGMSNavigatorWaypoint) { print("You have arrive at: (waypoint.title)") mapView.navigator?.continueToNextDestination() mapView.navigator?.isGuidanceActive = true }
Objective-C
- (void)navigator:(GMSNavigator *)navigator didArriveAtWaypoint:(GMSNavigatorWaypoint *)waypoint { NSLog(@"You have arrived at: %@", waypoint.title); [_mapView.navigator continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }
Ricezione di aggiornamenti sulle modifiche al percorso
Per ricevere una notifica ogni volta che la route viene modificata, crea un metodo per gestire l'evento navigatorDidChangeRoute
. Puoi accedere alla nuova route utilizzando le proprietà routeLegs
e currentRouteLeg
di GMSNavigator
.
Swift
func navigatorDidChangeRoute(_ navigator: GMS) { print("Il percorso è cambiato.") }
Objective-C
- (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route has changed."); }
Ricezione di aggiornamenti sull'orario di arrivo a destinazione
Per ricevere aggiornamenti continui fino alla destinazione, crea un metodo per gestire l'evento didUpdateRemainingTime
. Il parametro time
fornisce il tempo stimato, in secondi, fino al raggiungimento della destinazione successiva.
Swift
func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time: TimeInterval) { print("Time to next destination: (time)") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator didUpdateRemainingTime:(NSTimeInterval)time { NSLog(@"Time to next destination: %f", time); }
Per impostare la variazione minima del tempo stimato per arrivare alla destinazione successiva, imposta la proprietà timeUpdateThreshold
su GMSNavigator
. Il valore viene specificato in secondi. Se questa proprietà non è impostata, i servizi utilizzano un valore predefinito di 1 secondo.
Swift
navigator?.timeUpdateThreshold = 10
Objective-C
navigator.timeUpdateThreshold = 10;
Aggiornamenti sulla distanza di ricezione alla destinazione
Per ricevere aggiornamenti continui sulla distanza dalla destinazione, crea un metodo per gestire l'evento didUpdateRemainingDistance
. Il parametro distance
fornisce la distanza stimata, in metri, fino alla destinazione successiva.
Swift
func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distanza: CLLocationDistanza) {let miglio = distanza * 0.00062137 print("Distanza dalla destinazione successiva: (miglia) miglia.") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator didUpdateRemainingDistance:(CLLocationD)distance { double miglio = distanza * 0,00062137; NSLog(@"%@", [NSString stringWithFormat:@"Distanza dalla destinazione successiva: %.2f.", miglio]); }
Per impostare la variazione minima della distanza stimata fino alla destinazione successiva, imposta la proprietà distanceUpdateThreshold
su GMSNavigator
(il valore è specificato in metri). Se questa proprietà non è impostata, i servizi utilizzano un valore predefinito di 1 metro.
Swift
navigator?.distanceUpdateThreshold = 100
Objective-C
navigator.distanceUpdateThreshold = 100;
Ricezione di aggiornamenti sul traffico
Per ricevere aggiornamenti continui del flusso di traffico per la route rimanente, crea un metodo per gestire l'evento didUpdateDelayCategory
. Una chiamata a
delayCategoryToNextDestination
restituisce GMSNavigationDelayCategory
, che
fornisce un valore compreso tra 0 e 3. Gli aggiornamenti alla categoria si basano sulla
posizione attuale dell'utente dell'app. Se i dati sul traffico non sono disponibili,
GMSNavigationDelayCategory
restituisce 0. I numeri, da 1 a 3, indicano
un flusso crescente da leggero a intenso.
Swift
func navigator(_ navigator: GMSNavigator, didUpdate limitCategory: GMSNavigatorDelayCategory) { print("Flusso di traffico verso la destinazione successiva: (delayCategory)") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator didUpdateDelayCategory:(GMS NavigationDelayCategory)delayCategory { NSLog(@"Traffico verso la destinazione successiva: %ld", (long)delayCategory); }
La proprietà GMSNavigationDelayCategory
mostra i seguenti livelli di ritardo:
Categoria ritardo | Descrizione |
---|---|
GMSNavigationDelayCategoryNoData | 0 - Non disponibile, nessun dato sul traffico oppure : |
del percorso. | |
GMSNavigationDelayCategoryHeavy | 1 - Intenso. |
GMSNavigationDelayCategoryMedium | 2 - Media. |
GMSNavigationDelayCategoryLight | 3 - Leggero. |
Aggiornamenti sulla velocità di ricezione
Per ricevere aggiornamenti quando un conducente supera il limite di velocità, crea un metodo per gestire l'evento didUpdateSpeedingPercentage
.
Swift
// Listener per gestire gli eventi di velocità. func navigator( _ navigator: GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) { print("Speed is (percentageAboveLimit) above the limit.") }
Objective-C
// Listener per la gestione degli eventi di velocità. - (void)navigator:(GMSNavigator *)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit { NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit); }
Modificare la modalità di illuminazione suggerita
Per ricevere aggiornamenti sulle variazioni stimate dell'illuminazione, crea un metodo per gestire
l'evento didChangeSuggestedLightingMode
.
Swift
// Definisci un listener per le modifiche suggerite alla modalità illuminazione. func navigator(_ navigator: GMSNavigator, didChangeSuggestedLightingMode lightMode: GMSNavigatorLightingMode) { print("Suggested lighting mode has changed: (String(describing: lightsMode))")
// Apporta la modifica suggerita. mapView.lightingMode = lightMode }
Objective-C
// Definisci un listener per le modifiche suggerite alla modalità Luce. -(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode: (GMSNavigatorLightingMode)lightingMode { NSLog(@"Suggested lighting mode has changed: %ld", (long)lightingMode);
// Apporta la modifica suggerita. _mapView.lightingMode = lightMode; }