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:
GMSNavigatorListener.didArriveAtWaypoint
, wird ausgelöst, wenn ein Ziel erreicht wird.GMSNavigatorListener.navigatorDidChangeRoute
, wird ausgelöst, wenn sich die Route ändert.GMSNavigatorListener.didUpdateRemainingTime
, wiederholt aufgerufen, wenn sich die Zeit bis zum nächsten Ziel ändert. die Orientierungshilfe aktiv ist.GMSNavigatorListener.didUpdateRemainingDistance
, wiederholt aufgerufen, wenn sich die Entfernung zum nächsten Ziel ändert. die Orientierungshilfe aktiv ist.GMSNavigatorListener.didUpdateDelayCategory
, wird aufgerufen, wenn sich die Verspätungskategorie zum nächsten Ziel ändert, während die Orientierungshilfe aktiv ist.GMSNavigatorListener.didChangeSuggestedLightingMode
, wird ausgelöst, wenn die geschätzten Lichtverhältnisse aktualisiert werden. Beispiel: Wenn die Nacht am aktuellen Standort des Benutzers eingeht, ändert sich die Beleuchtung.GMSNavigatorListener.didUpdateSpeedingPercentage
, wird ausgelöst, wenn der Fahrer die Geschwindigkeitsbegrenzung überschreitet.GMSRoadSnappedLocationProviderListener.didUpdateLocation
, wiederholt aufgerufen werden, wenn sich der Standort des Nutzers ändert.
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; }