Ein Datenfeed für die detaillierte Routenführung enthält nur Navigationsinformationen für Geräte, die nicht für die kartenbasierte Navigation vorgesehen sind. Er liefert anstehende Manöver mit von Ihnen bereitgestellten Elementen:
- Symbole (links, rechts, Abbiegen)
- Abbiegeverbote in Kreisverkehren
- Straßennamen
- geschätzte Entfernungen und Zeit bis zum nächsten Navigationsschritt oder zum Endziel
Sie können den Feed mit Schritt-für-Schritt-Angaben verwenden, wenn die vollständige Navigation SDK-Benutzeroberfläche nicht geeignet ist, z. B. auf kleinen Bildschirmen. Sie können diese Funktion beispielsweise für Nutzer von Zweirädern verwenden, um ihnen eine reine Navigationshilfe zu projizieren, damit sie ihre Ziele schneller und sicherer mit minimalen Ablenkungen erreichen.
Wichtige Navigationselemente
Die Hauptfelder für jeden Navigationsschritt sind der vollständige Straßenname, das Abbiegemanöver und die Gesamtstrecke des Schritts. Sie sind in GMSNavigationStepInfo
verfügbar.
Für die gesamte Fahrt können Sie die verbleibende Zeit und die Entfernung bis zum aktuellen Schritt oder zum Ziel anzeigen lassen. Diese Informationen sind in GMSNavigationNavInfo
verfügbar.
Das Bild rechts zeigt ein Beispiel für diese wichtigen Navigationselemente.
Event-Listener einrichten
Wenn Sie nur Navigationsdaten verwenden möchten, müssen Sie einen Ereignis-Listener für das Ereignis didChangeNavInfo
implementieren. Rufen Sie im Ereignis-Listener Informationen zu Fahrten und Schritten ab, um Nutzern eine detaillierte Navigation zur Verfügung zu stellen.
Damit Ereignis-Handler implementiert werden können, muss der Ansichts-Controller der Karte das Protokoll GMSNavigatorListener
implementieren. Ausführliche Informationen zum Umgang mit Ereignissen im Navigation SDK for iOS finden Sie unter Auf Navigationsereignisse warten.
didChangeNavInfo
-Ereignis verarbeiten
Erstellen Sie einen Listener für das didChangeNavInfo
-Ereignis, um Ihrer App die Unterstützung für die Schritt-für-Schritt-Navigation hinzuzufügen. Verwenden Sie im Listener die folgenden Klassen und Enumerationen, um die Navigation per Sprachausgabe zu steuern:
GMSNavigationNavInfo
: Klasse, die Informationen zum Navigationsstatus definiert.GMSNavigationStepInfo
: Klasse, die Informationen zu einem einzelnen Schritt auf einer Navigationsroute definiert.GMSNavigationNavState
: Enum, das den aktuellen Status einer Navigation definiert, z. B. „enroute“, „rerouting“ oder „stopped“.GMSNavigationDrivingSide
: Enum, das angibt, ob sich dieser Schritt auf einer Route mit Rechts- oder Linksverkehr befindet.GMSNavigationManeuver
: Enum, das die durchzuführende Navigationsaktion definiert, z. B. „nach links abbiegen“ oder „nach rechts abbiegen“.
Unten finden Sie Beispiele für Ereignis-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
Verwende die Property navState
von GMSNavigationNavInfo
, um den aktuellen Navigationsstatus abzurufen. Dieser kann einer der folgenden sein:
Unterwegs: Der Status
GMSNavigationNavStateEnroute
bedeutet, dass die Navigation derzeit aktiv ist und sich der Nutzer auf der angegebenen Route befindet. Informationen zum nächsten Manöverschritt sind verfügbar.Routenänderung:
GMSNavigationNavStateRerouting
bedeutet, dass die Navigation aktiv ist, der Navigationsgerät aber nach einer neuen Route sucht. Der nächste Abbiegeversuch ist nicht verfügbar, da noch keine neue Route vorhanden ist.Angehalten:
GMSNavigationNavStateStopped
bedeutet, dass die Navigation beendet wurde. So wird die Navigation beispielsweise beendet, wenn der Nutzer die Navigation in der App beendet. In der Beispiel-App wird bei einem Status vonGMSNavigationNavStateStopped
die Navigationsinfoanzeige gelöscht, damit keine überflüssigen Schrittanleitungen angezeigt werden.
Spurführung
Das Navigation SDK stellt Fahrstreifen auf der Navigations-Abbiegekarte als GMSNavigationLane
- und GMSNavigationLaneDirection
-Datenobjekte dar. Ein GMSNavigationLane
-Objekt stellt während der Navigation eine bestimmte Fahrspur dar und enthält eine Liste von GMSNavigationLaneDirection
-Objekten, die alle Abbiegemöglichkeiten von dieser Fahrspur beschreiben.
Die empfohlene Fahrtrichtung in einem Fahrstreifen wird mit dem Feld recommended
gekennzeichnet.
Beispiel für die Spurführung
Das folgende Snippet veranschaulicht die Datendarstellung der Fahrstreifen im vorherigen Screenshot.
// Lane 1
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 2
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 3
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false}]
// Lane 4
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false},
{/*GMSNavigationLaneShape=*/ GMSNavigationLaneShapeNormalRight, /*recommended=*/ false}]
Bilder für die Spurführung
Das Navigation SDK unterstützt die Generierung von Fahrstreifenbildern für jeden Navigationsschritt, wie von GMSNavigationStepInfo
angegeben. Diese Symbole entsprechen den Richtlinien für die Bildgröße in CarPlay.
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];
Symbole für Manöver erstellen
Das GMSNavigationManeuver
-Enum definiert alle möglichen Manöver, die beim Navigieren auftreten können. Das Manöver für einen bestimmten Schritt können Sie über die Eigenschaft maneuver
von GMSNavigationStepInfo
abrufen.
Sie müssen Symbole für die einzelnen Fahrmanöver erstellen und mit den entsprechenden Fahrmanövern verknüpfen.
Für einige Manöver können Sie eine Eins-zu-Eins-Zuordnung zu einem Symbol einrichten, z. B. GMSNavigationManeuverDestinationLeft
und GMSNavigationManeuverDestinationRight
. Da einige Manöver jedoch gemeinsame Merkmale haben, können Sie einem einzigen Symbol mehrere Manöver zuordnen. So können beispielsweise GMSNavigationManeuverTurnLeft
und GMSNavigationManeuverOnRampLeft
dem Symbol für die Linksabbiegung zugeordnet werden.
Einige Wendemanöver enthalten ein zusätzliches Label „Im Uhrzeigersinn“ oder „Gegen den Uhrzeigersinn“, das vom SDK basierend auf der Fahrseite eines Landes bestimmt wird. In Ländern, in denen auf der linken Straßenseite gefahren wird, fahren Fahrer beispielsweise im Kreisverkehr oder beim Abbiegen im Uhrzeigersinn, während in Ländern mit Rechtsverkehr gegen den Uhrzeigersinn gefahren wird. Das Navigations-SDK erkennt, ob ein Manöver bei Links- oder Rechtsverkehr ausgeführt wird, und gibt das entsprechende Manöver aus. Daher kann das Symbol für ein Abbiegen im Uhrzeigersinn von dem für ein Abbiegen gegen den Uhrzeigersinn abweichen.
Maximieren Sie die Ansicht, um Beispielsymbole für verschiedene Manöver zu sehen.
Beispielsymbol | Detaillierte Anweisungen für Abbiegemanöver |
---|---|
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
|
Generierte Symbole verwenden
Das Navigation SDK unterstützt die Generierung von Abbiegeverweisen für eine bestimmte GMSNavigationStepInfo
. Diese Symbole entsprechen den Richtlinien für die Bildgröße in CarPlay.
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];