Navigationsereignisse im Blick behalten

Mithilfe dieser Anleitung kannst du deiner App ermöglichen, verschiedene Ereignisse zu erkennen und darauf zu reagieren die sich ändern, wenn Nutzende auf einer Route navigieren. Dieser Leitfaden behandelt nicht eine Route definieren und nur auf Ereignisse auf einer Route reagieren.

Übersicht

Das Navigation SDK für iOS bietet Listener die mit dem Standort des Nutzers und den Bedingungen auf der Route verknüpft sind. wichtigen Zeit- und Entfernungsdaten. Im Ansichts-Controller der Karte zeigt Ihre App muss die Protokolle für diese Listener übernehmen: GMSRoadSnappedLocationProviderListener und GMSNavigatorListener

In der folgenden Liste sind die Listener-Methoden aufgeführt, die für Navigationsereignisse verfügbar sind:

Code

Erklärung der Konformität mit den erforderlichen Protokollen

Vor der Implementierung der Navigationsmethoden muss der Ansichts-Controller die Protokolle:

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

Nachdem Sie die Navigationsprotokolle übernommen haben, legen Sie die Listener auf die Ansicht fest. Controller. Sie können beispielsweise den folgenden Code in die Datei viewDidLoad() einfügen: .

Swift

mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)

Objective-C

[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider
addListener:self];

Standortaktualisierungen erhalten oder stoppen

Damit der Fortschritt des Nutzers auf der Karte angezeigt werden kann, sind Standortaktualisierungen erforderlich.

Die Instanz location stellt die folgenden Attribute bereit:

Standorteigenschaft Beschreibung
Höhe Aktuelle Höhe.
coordinate.latitude Aktuelle Koordinate des Breitengrads für bestimmte Straßen.
coordinate.longitude Aktuelle Koordinate des Längengrads für bestimmte Straßen.
Kurs Aktuelle Peilung in Grad.
speed Aktuelle Geschwindigkeit.
timestamp Datum/Uhrzeit der aktuellen Messung.

Wenn du kontinuierlich Standortupdates erhalten möchtest, rufe folgende Nummer an: mapView.roadSnappedLocationProvider.startUpdatingLocation und verwenden Sie die GMSRoadSnappedLocationProviderListener für die Verarbeitung von didUpdateLocation .

Hier sehen Sie, wie startUpdatingLocation aufgerufen wird:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatingLocation];

Mit dem folgenden Code wird ein GMSRoadSnappedLocationProviderListener erstellt, verarbeitet das didUpdateLocation-Ereignis.

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); }

Wenn du Standortupdates erhalten möchtest, wenn die App im Hintergrund läuft, stelle Folgendes ein: allowsBackgroundLocationUpdates auf wahr:

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

Ankunftsereignisse erkennen

Ihre App verwendet das didArriveAtWaypoint-Ereignis, um zu erkennen, wenn ein Ziel erreicht wurden. Sie können die Navigation fortsetzen und zum nächsten Wegpunkt gehen, indem Sie continueToNextDestination() aufrufen und dann die Anleitung wieder aktivieren. Ihre App muss nach dem Aufruf von continueToNextDestination() die Anleitung wieder aktivieren.

Nachdem die App continueToNextDestination angerufen hat, hat der Navigator keine Daten zum vorherigen Ziel. Wenn Sie Informationen zu einer Routenabschnitt müssen Sie diese aus dem Navigator abrufen, bevor Sie continueToNextDestination()

Das folgende Codebeispiel zeigt eine Methode zum Verarbeiten des didArriveAtWaypoint Ereignis:

Swift

func navigator(_ navigator: GMSNavigator, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint { NSLog(@"You have
    arrived at: %@", waypoint.title); [_mapView.navigator
    continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }

Updates zu Routenänderungen werden empfangen

Um bei jeder Änderung der Route benachrichtigt zu werden, erstellen Sie eine Methode, verarbeiten das navigatorDidChangeRoute-Ereignis. So greifen Sie auf die neue Route zu: mithilfe der Attribute routeLegs und currentRouteLeg von GMSNavigator.

Swift

func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }

Objective-C

-   (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route
    has changed."); }

Aktualisierungen der Zeit bis zum Ziel werden empfangen

Um kontinuierlich die Zeit für Zielaktualisierungen zu erhalten, erstellen Sie eine Methode zur Verarbeitung der didUpdateRemainingTime-Ereignis. Der Parameter time liefert die geschätzten Zeit (in Sekunden), bis das nächste Ziel erreicht ist.

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); }

Um die minimale Änderung der geschätzten Zeit bis zum nächsten Ziel festzulegen, legen Sie den Parameter Property „timeUpdateThreshold“ am GMSNavigator. Der Wert wird angegeben in Sekunden. Wenn dieses Attribut nicht festgelegt ist, verwenden die Dienste den Standardwert 1 2.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Aktualisierung der Entfernung zum Ziel

Erstellen Sie eine Methode zur Verarbeitung, um fortlaufende Aktualisierungen der Entfernung zum Ziel zu erhalten. Das didUpdateRemainingDistance-Ereignis. Der Parameter distance stellt die geschätzte Entfernung in Metern zum nächsten Ziel.

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distance:
CLLocationDistance) { let miles = distance * 0.00062137 print("Distance to next
destination: \(miles) miles.") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateRemainingDistance:(CLLocationDistance)distance { double miles =
    distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Distance to
    next destination: %.2f.", miles]); }

Um die minimale Änderung der geschätzten Entfernung zum nächsten Ziel festzulegen, legen Sie den Eigenschaft distanceUpdateThreshold auf GMSNavigator (Wert wird angegeben in Meter). Wenn dieses Attribut nicht festgelegt ist, verwenden die Dienste den Standardwert 1 Messtool.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Verkehrsinformationen erhalten

Um kontinuierlich Updates des Verkehrsflusses für die verbleibende Route zu erhalten, Erstellen Sie eine Methode zum Verarbeiten des didUpdateDelayCategory-Ereignisses. Ein Aufruf an delayCategoryToNextDestination gibt GMSNavigationDelayCategory zurück, das einen Wert von 0 bis 3 liefert. Aktualisierungen der Kategorie basieren auf den aktuellen Position der App-Nutzer. Wenn keine Verkehrsdaten verfügbar sind, GMSNavigationDelayCategory gibt 0 zurück. Die Zahlen 1 bis 3 stehen für zunehmende von leicht zu stark wechseln.

Swift

func navigator(_ navigator: GMSNavigator, didUpdate delayCategory:
GMSNavigationDelayCategory) { print("Traffic flow to next destination:
\(delayCategory)") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory {
    NSLog(@"Traffic flow to next destination: %ld", (long)delayCategory); }

Das Attribut GMSNavigationDelayCategory verursacht die folgenden Verzögerungsstufen:

Kategorie der Verspätung Beschreibung
GMSNavigationDelayCategoryNoData 0 - Nicht verfügbar, keine Daten für Traffic oder :
die Route berechnen.
GMSNavigationDelayCategoryHeavy 1 – Stark.
GMSNavigationDelayCategoryMedium 2 – Mittel.
GMSNavigationDelayCategoryLight 3 – Leicht.

Informationen zu Geschwindigkeitsüberschreitungen werden empfangen

Um Updates zu erhalten, wenn ein Fahrer die Geschwindigkeitsbegrenzung überschreitet, erstellen Sie eine Methode zum Verarbeiten des didUpdateSpeedingPercentage-Ereignisses.

Swift

// Listener to handle speeding events. func navigator( _ navigator:
GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) {
print("Speed is \(percentageAboveLimit) above the limit.") }

Objective-C

// Listener to handle speeding events. - (void)navigator:(GMSNavigator
*)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit {
NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit); }

Modus für vorgeschlagene Beleuchtung ändern

Wenn du Benachrichtigungen zu geschätzten Lichtänderungen erhalten möchtest, erstelle eine Methode zur Verarbeitung Das didChangeSuggestedLightingMode-Ereignis.

Swift

// Define a listener for suggested changes to lighting mode. func navigator(_
navigator: GMSNavigator, didChangeSuggestedLightingMode lightingMode:
GMSNavigationLightingMode) { print("Suggested lighting mode has changed:
\(String(describing: lightingMode))")

 // Make the suggested change. mapView.lightingMode = lightingMode }

Objective-C

// Define a listener for suggested changes to lighting mode.
-(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode:
(GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested lighting mode has
changed: %ld", (long)lightingMode);

 // Make the suggested change. _mapView.lightingMode = lightingMode; }