In diesem Leitfaden erfahren Sie, wie Sie Ihre App so konfigurieren, dass sie auf verschiedene Ereignisse reagiert, die sich ändern, wenn ein Nutzer eine Route entlangfährt. In diesem Leitfaden wird nicht beschrieben, wie eine Route definiert wird, sondern nur, wie auf Ereignisse entlang einer Route reagiert wird.
Übersicht
Das Navigation SDK für iOS bietet Listener für den Standort des Nutzers, die Bedingungen auf der Route sowie wichtige Zeit- und Entfernungsdaten. Im Ansichts-Controller der Karte muss Ihre App die Protokolle für diese Listener übernehmen: GMSRoadSnappedLocationProviderListener
und GMSNavigatorListener
.
In dieser Liste sind die Listener-Methoden für Navigationsereignisse aufgeführt:
GMSNavigatorListener.didArriveAtWaypoint
: Wird ausgelöst, wenn ein Ziel erreicht wird.GMSNavigatorListener.navigatorDidChangeRoute
>: Wird ausgelöst, wenn sich die Route ändert.GMSNavigatorListener.didUpdateRemainingTime
wird wiederholt aufgerufen, wenn sich die Zeit bis zum nächsten Ziel ändert, während die Navigation aktiv ist.GMSNavigatorListener.didUpdateRemainingDistance
wird wiederholt aufgerufen, wenn sich die Entfernung zum nächsten Ziel ändert, während die Navigation aktiv ist.GMSNavigatorListener.didUpdateDelayCategory
>: Wird aufgerufen, wenn sich die Verzögerungskategorie für das nächste Ziel ändert, während die Routenführung aktiv ist.GMSNavigatorListener.didChangeSuggestedLightingMode
: wird ausgelöst, wenn die geschätzten Lichtverhältnisse aktualisiert werden. Wenn es beispielsweise am aktuellen Standort des Nutzers dunkel wird, ändert sich die Beleuchtung.GMSNavigatorListener.didUpdateSpeedingPercentage
: Wird ausgelöst, wenn der Fahrer die zulässige Höchstgeschwindigkeit überschreitet.GMSRoadSnappedLocationProviderListener.didUpdateLocation
: wird wiederholt aufgerufen, wenn sich der Standort des Nutzers ändert.
Code
Konformität mit den erforderlichen Protokollen erklären
Bevor Sie die Navigationsmethoden implementieren, muss der Ansichtscontroller die Protokolle übernehmen:
Swift
class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {
Objective-C
@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>
@end
Nachdem Sie die Navigationsprotokolle übernommen haben, legen Sie die Listener für den Ansichtscontroller fest. Sie können beispielsweise den folgenden Code der Methode viewDidLoad()
hinzufügen.
Swift
mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)
Objective-C
[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider
addListener:self];
Standortaktualisierungen erhalten oder beenden
Standortaktualisierungen sind erforderlich, um den Fortschritt des Nutzers auf der Karte anzuzeigen.
Die location
-Instanz umfasst die folgenden Eigenschaften:
Standorteigenschaft | Beschreibung |
---|---|
Höhe | Aktuelle Höhe. |
coordinate.latitude | Aktuelle auf die Straße ausgerichtete Breitengradkoordinate. |
coordinate.longitude | Aktuelle auf die Straße ausgerichtete Längengradkoordinate. |
Kurs | Aktuelle Ausrichtung in Grad. |
speed | Aktuelle Geschwindigkeit. |
timestamp | Datum/Uhrzeit der aktuellen Messung. |
Wenn Sie kontinuierliche Standortaktualisierungen erhalten möchten, rufen Sie mapView.roadSnappedLocationProvider.startUpdatingLocation
auf und verwenden Sie GMSRoadSnappedLocationProviderListener
, um das didUpdateLocation
-Ereignis zu verarbeiten.
Hier sehen Sie, wie startUpdatingLocation
aufgerufen wird:
Swift
mapView.roadSnappedLocationProvider.startUpdatingLocation()
Objective-C
[_mapView.roadSnappedLocationProvider startUpdatingLocation];
Mit dem folgenden Code wird ein GMSRoadSnappedLocationProviderListener
erstellt, das das didUpdateLocation
-Ereignis verarbeitet.
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 Sie Standortaktualisierungen erhalten möchten, wenn die App im Hintergrund ausgeführt wird, setzen Sie allowsBackgroundLocationUpdates
auf „true“:
Swift
mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true
Objective-C
_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;
Ereignisse bei Ankunft erkennen
Ihre App verwendet das Ereignis didArriveAtWaypoint
, um zu erkennen, wann ein Ziel erreicht wurde. Sie können die Routenführung fortsetzen und zum nächsten Wegpunkt wechseln, indem Sie continueToNextDestination()
aufrufen und die Routenführung dann wieder aktivieren. Ihre App muss die Anleitung nach dem Aufrufen von continueToNextDestination()
wieder aktivieren.
Nachdem die App continueToNextDestination
aufgerufen hat, hat der Navigator keine Daten mehr zum vorherigen Ziel. Wenn Sie Informationen zu einem Routenabschnitt analysieren möchten, müssen Sie diese vor dem Aufrufen von continueToNextDestination()
aus dem Navigator abrufen.
Das folgende Codebeispiel zeigt eine Methode zum Verarbeiten des didArriveAtWaypoint
-Ereignisses:
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; }
Aktualisierungen zu Routenänderungen erhalten
Wenn Sie eine Benachrichtigung erhalten möchten, sobald sich die Route ändert, erstellen Sie eine Methode zum Verarbeiten des navigatorDidChangeRoute
-Ereignisses. Sie können auf den neuen Pfad zugreifen, indem Sie die Attribute routeLegs
und currentRouteLeg
von GMSNavigator
verwenden.
Swift
func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }
Objective-C
- (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route
has changed."); }
Aktualisierungen der Ankunftszeit erhalten
Wenn Sie kontinuierliche Aktualisierungen der geschätzten Ankunftszeit erhalten möchten, erstellen Sie eine Methode zur Verarbeitung des didUpdateRemainingTime
-Ereignisses. Der Parameter time
gibt die geschätzte Zeit in Sekunden an, bis das nächste Ziel erreicht wird.
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 Mindeständerung der geschätzten Zeit bis zum nächsten Ziel festzulegen, legen Sie die Eigenschaft timeUpdateThreshold
für GMSNavigator
fest. Der Wert wird in Sekunden angegeben. Wenn diese Eigenschaft nicht festgelegt ist, verwenden die Dienste einen Standardwert von einer Sekunde.
Swift
navigator?.timeUpdateThreshold = 10
Objective-C
navigator.timeUpdateThreshold = 10;
Aktualisierungen der Entfernung zum Ziel erhalten
Wenn Sie kontinuierliche Updates zur Entfernung zum Ziel erhalten möchten, erstellen Sie eine Methode zur Verarbeitung des didUpdateRemainingDistance
-Ereignisses. Der Parameter distance
gibt die geschätzte Entfernung zum nächsten Ziel in Metern an.
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]); }
Wenn Sie die Mindeständerung der geschätzten Entfernung zum nächsten Ziel festlegen möchten, legen Sie die Eigenschaft distanceUpdateThreshold
für GMSNavigator
fest (der Wert wird in Metern angegeben). Wenn diese Eigenschaft nicht festgelegt ist, verwenden die Dienste den Standardwert von einem Meter.
Swift
navigator?.distanceUpdateThreshold = 100
Objective-C
navigator.distanceUpdateThreshold = 100;
Verkehrsinformationen erhalten
Wenn Sie kontinuierliche Updates des Verkehrsflusses für die verbleibende Route erhalten möchten, erstellen Sie eine Methode zur Verarbeitung des didUpdateDelayCategory
-Ereignisses. Ein Aufruf von delayCategoryToNextDestination
gibt GMSNavigationDelayCategory
zurück, das einen Wert zwischen 0 und 3 liefert. Die Aktualisierungen der Kategorie basieren auf der aktuellen Position des App-Nutzers. Wenn keine Zugriffsdaten verfügbar sind, wird für GMSNavigationDelayCategory
der Wert 0 zurückgegeben. Die Zahlen 1 bis 3 geben eine zunehmende Blutungsintensität an, von leicht bis stark.
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); }
Die GMSNavigationDelayCategory
-Eigenschaft bietet die folgenden Verzögerungsstufen:
Verzögerungskategorie | Beschreibung |
---|---|
GMSNavigationDelayCategoryNoData | 0 – Nicht verfügbar, keine Daten für Verkehr oder : |
die Route. | |
GMSNavigationDelayCategoryHeavy | 1 – Schwer. |
GMSNavigationDelayCategoryMedium | 2 – Mittel |
GMSNavigationDelayCategoryLight | 3 – Leicht. |
Benachrichtigungen zu Geschwindigkeitsüberschreitungen erhalten
Wenn Sie Benachrichtigungen erhalten möchten, wenn ein Fahrer die Geschwindigkeitsbegrenzung überschreitet, erstellen Sie eine Methode zur Verarbeitung 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); }
Vorgeschlagenen Beleuchtungsmodus ändern
Wenn Sie über geschätzte Änderungen der Beleuchtung informiert werden möchten, erstellen Sie eine Methode zur Verarbeitung des didChangeSuggestedLightingMode
-Ereignisses.
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; }