Ein Datenfeed mit detaillierter Routenführung bietet nur Navigationsinformationen für Geräte, die nicht für die kartenbasierte Navigation entwickelt wurden. Sie ermöglicht bevorstehende Vorgehensweisen mit den von Ihnen bereitgestellten Elementen:
- Symbole (links, rechts, wenden)
- Nummern in Kreisverkehren abbiegen
- Straßennamen
- geschätzte Entfernungen und die Fahrzeit bis zum nächsten Navigationsschritt oder zum endgültigen Ziel
Sie können den detaillierten Feed verwenden, um Tests zu erstellen, bei denen die vollständige Benutzeroberfläche des Navigation SDK nicht geeignet ist, z. B. für kleine Bildschirme. Sie können dies beispielsweise für Fahrgäste von Zweirädern verwenden, bei denen Sie eine nur Navigation zur Verfügung stehende Anleitung projizieren können, damit sie ihre Ziele schneller und sicherer mit minimaler Ablenkung erreichen.
Wichtige Elemente der Navigationsanzeige
Die Hauptfelder für die einzelnen Navigationsschritte sind der vollständige Straßenname, die Fahrtrichtung und die Gesamtentfernung des Schritts. Diese Informationen sind in GMSNavigationStepInfo verfügbar.
Für die gesamte Fahrt können Sie die verbleibende Zeit und die Entfernung zum aktuellen Schritt oder zum Ziel anzeigen lassen, die alle in GMSNavigationNavInfo verfügbar sind. Das Bild auf der rechten Seite zeigt ein Beispiel für diese wesentlichen Navigationselemente.
Event-Listener einrichten
Wenn Sie Daten verwenden möchten, die ausschließlich zur Navigation dienen, müssen Sie für das Ereignis didChangeNavInfo
einen Event-Listener implementieren. Greifen Sie im Event-Listener auf Fahrt- und Schrittinformationen zu, um Ihren Nutzern eine detaillierte Routenführung bereitzustellen.
Zur Implementierung von Event-Handlern muss der Ansichts-Controller der Karte das GMSNavigatorListener
-Protokoll implementieren. Ausführliche Informationen zum Verarbeiten von Ereignissen im Navigation SDK for iOS finden Sie unter Auf Navigationsereignisse warten.
Umgang mit dem Ereignis „daddChangeNavInfo“
Erstellen Sie einen Listener für das didChangeNavInfo
-Ereignis, um die detaillierte Routenführung in Ihre App einzubinden. Verwenden Sie im Event-Listener die folgenden Klassen und Enums, um die detaillierte Routenführung zu steuern:
GMSNavigationNavInfo – Klasse, die Informationen zum Navigationsstatus definiert.
GMSNavigationStepInfo: Klasse, die Informationen zu einem einzelnen Schritt entlang einer Navigationsroute definiert.
GMSNavigationNavState: Aufzählung, die den aktuellen Status einer Navigation definiert, z. B. unterwegs, neu berechnet oder angehalten.
GMSNavigationDrivingSide: Aufzählung, die festlegt, ob es sich bei diesem Schritt um eine Fahrt-auf-Rechts- oder eine Links-Fahrt-Route handelt.
GMSNavigationManeuver: Enum-Wert, mit dem die Navigationsaktion definiert wird, z. B. nach links oder rechts abbiegen.
Unten sehen Sie Beispiele für Event-Listener für das didChangeNavInfo
-Ereignis:
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; ... } } ... }
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 ... } } } }
Navigationsstatus
Verwenden Sie die Eigenschaft navState
von GMSNavigationNavInfo, um den aktuellen Navigationsstatus abzurufen:
Enroute: Der Status
GMSNavigationNavStateEnroute
bedeutet, dass die geführte Navigation derzeit aktiv ist und sich der Nutzer auf der angegebenen Route befindet. Es sind Informationen über den aktuellen anstehenden Schritt des Manövers verfügbar.Neuberechnung:
GMSNavigationNavStateRerouting
bedeutet, dass die Navigation gerade läuft, aber im Navigator nach einer neuen Route gesucht wird. Der nächste Schritt für das Manövrieren ist nicht verfügbar, da es noch keine neue Route gibt.Angehalten:
GMSNavigationNavStateStopped
bedeutet, dass die Navigation beendet wurde. Beispielsweise wird die Navigation beendet, wenn der Nutzer die Navigation in der App beendet. In der Beispiel-App löscht der ZustandGMSNavigationNavStateStopped
die Anzeige mit den Navigationsinformationen, um zu verhindern, dass anhaltende Schrittanweisungen angezeigt werden.
Symbole für Manöver erstellen
Der Enum GMSNavigationManeuver definiert alle möglichen Bewegungen während der Navigation. Sie können die Bewegung für einen bestimmten Schritt über die Eigenschaft maneuver
von GMSNavigationStepInfo abrufen.
Sie müssen Symbole für Manöver erstellen und mit den entsprechenden Manövern koppeln.
Bei einigen Manövern können Sie eine 1:1-Zuordnung zu einem Symbol einrichten, z. B. GMSNavigationManeuverDestinationLeft
und GMSNavigationManeuverDestinationRight
.
Da einige Manöver jedoch gemeinsame Merkmale mit denen anderer Mittel haben, kann es sinnvoll sein, einem Symbol mehrere Manöver zuzuordnen. So können beispielsweise GMSNavigationManeuverTurnLeft
und GMSNavigationManeuverOnRampLeft
dem Linksabbiegesymbol zugeordnet werden.
Manche Manöver werden zusätzlich mit dem Label „Im Uhrzeigersinn“ oder „Gegen den Uhrzeigersinn“ gekennzeichnet, das vom SDK basierend auf der Fahrtseite eines Landes bestimmt wird. In Ländern, in denen Fahrzeuge auf der linken Straßenseite fahren, biegen sie beispielsweise im Uhrzeigersinn einen Kreisverkehr oder wenden sie im Uhrzeigersinn ab, während Länder, die auf der rechten Straßenseite fahren, entgegen dem Uhrzeigersinn fahren. Das Navigation SDK erkennt, ob ein Manöver im linken oder rechten Verkehr stattfindet, und gibt das entsprechende Manöver aus. Daher kann das Bewegungssymbol für eine Bewegung im und gegen den Uhrzeigersinn unterschiedlich sein.
Maximieren, um Beispielsymbole für verschiedene Manövern zu sehen
Beispielsymbol | Detaillierte Routenführung |
---|---|
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
|