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 bietet für bevorstehende Manöver Elemente, die Sie angeben:
- 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 detaillierten Wegbeschreibungen 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 Fahrer von Zweirädern verwenden, um ihnen nur Navigationshinweise zu projizieren, damit sie ihr Ziel 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 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.
Ereignis-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 Ereignishandler implementiert werden können, muss der Viewcontroller der Karte das Protokoll GMSNavigatorListener
implementieren. Ausführliche Informationen zum Umgang mit Ereignissen im Navigation SDK für iOS finden Sie unter Auf Navigationsereignisse warten.
Umgang mit dem Ereignis didChangeNavInfo
Erstellen Sie einen Listener für das Ereignis didChangeNavInfo
, um Ihrer App die Unterstützung für die Schritt-für-Schritt-Navigation hinzuzufügen. Verwenden Sie im Ereignis-Listener die folgenden Klassen und Enumerationen, um die Navigation per Sprachausgabe zu steuern:
GMSNavigationNavInfo
: Informationen zum Navigationsstatus.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 Beispiel-Ereignislistener für das Ereignis didChangeNavInfo
:
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 ... } } } }
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; ... } } ... }
Navigationsstatus
Mit der navState
-Eigenschaft von GMSNavigationNavInfo
können Sie den aktuellen Navigationsstatus abrufen. 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 bevorstehenden Fahrmanöver sind verfügbar.Weiterleitung:
GMSNavigationNavStateRerouting
bedeutet, dass die Navigation aktiv ist, der Navigationsgerät aber nach einer neuen Route sucht. Der nächste Fahrmanöverschritt ist nicht verfügbar, da noch keine neue Route vorhanden ist.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 wird bei einem Status vonGMSNavigationNavStateStopped
die Navigationsinfoanzeige gelöscht, damit keine überflüssigen Schrittanleitungen angezeigt werden.
Spurführung
Das Navigations-SDK stellt Fahrstreifen auf der Navigations-Abbiegekarte als GMSNavigationLane
- und GMSNavigationLaneDirection
-Datenobjekte dar. Ein GMSNavigationLane
-Objekt stellt eine bestimmte Fahrspur während der Navigation 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
Im folgenden Snippet wird die Datendarstellung der Fahrstreifen dargestellt, die im vorherigen Screenshot zu sehen sind.
// 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 Fahrstreifenbeschilderung
Das Navigations-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 während der Navigation auftreten können. Das Manöver für einen bestimmten Schritt können Sie über die maneuver
-Eigenschaft 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 Linksabbiegen 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, in denen auf der rechten Straßenseite gefahren wird, gegen den Uhrzeigersinn gefahren wird. Das Navigations-SDK erkennt, ob ein Abbiegevorgang bei Links- oder Rechtsverkehr erfolgt, und gibt das entsprechende Abbiegemanö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 | Schritt-für-Schritt-Aktionen |
---|---|
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 Navigations-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];