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

Auf einem Mobilgerät wird angezeigt, dass in 15 Metern eine Rechtsabbiegung in die Church Street ansteht. Unten auf dem Bildschirm wird angezeigt, dass die Fahrt noch 13 Minuten dauern wird und dass noch 3, 4 km zurückgelegt werden müssen.

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

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

Symbol für Manöver

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