Details zum detaillierten Datenfeed

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

Ein Smartphone-Display, auf dem eine bevorstehende Rechtsabbiegung in 15 Meter Entfernung in die Church Street angezeigt wird. Unten auf dem Bildschirm sehen Sie, dass die verbleibende Zeit bis zum Ziel 13 Minuten und die verbleibende Entfernung 3, 4 km beträgt.

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;
        ...
      }
    }
    ...
  }

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 von GMSNavigationNavStateStopped 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

Manöversymbol

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];