Details zum detaillierten Datenfeed

Ein Feed mit detaillierter Routenführung enthält nur Navigationsinformationen für Geräte, die nicht für die kartenbasierte Navigation entwickelt wurden. Es werden anstehende Manöver mit den von Ihnen angegebenen Elementen angezeigt:

  • Symbole (links, rechts, U-Turn)
  • Abbiegen in Kreisverkehren
  • Straßennamen
  • geschätzte Entfernungen und Zeit bis zum nächsten Navigationsschritt oder zum endgültigen Ziel

Sie können den Turn-by-Turn-Feed verwenden, um Benutzeroberflächen zu erstellen, bei denen die vollständige Navigation SDK-Benutzeroberfläche nicht geeignet ist, z. B. für kleine Bildschirme. So können Sie beispielsweise für Fahrer von Zweirädern nur die Navigationsanweisungen anzeigen lassen, damit sie ihr Ziel schneller und sicherer erreichen und dabei möglichst wenig abgelenkt werden.

Wichtige Navigationselemente

Auf einem Mobilgerät wird angezeigt, dass in 15 Metern rechts in die Church Street abgebogen werden muss. Unten auf dem Display wird angezeigt, dass es noch 13 Minuten bis zum Ziel sind und die verbleibende Strecke 2, 1 Meilen beträgt.

Die primären Felder für jeden Navigationsschritt sind der vollständige Straßenname, das Manöver und die Gesamtentfernung des Schritts, die in GMSNavigationStepInfo verfügbar sind.

Für die gesamte Fahrt können Sie die verbleibende Zeit und Entfernung zum aktuellen Schritt oder zum Ziel anzeigen lassen. Diese sind alle 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 Event-Listener für das didChangeNavInfo-Ereignis implementieren. Greifen Sie im Ereignis-Listener auf Informationen zu Fahrten und Schritten zu, um Ihren Nutzern eine detaillierte Navigation zu ermöglichen.

Um Ereignishandler zu implementieren, muss der Ansichts-Controller der Karte das Protokoll GMSNavigatorListener implementieren. Ausführliche Informationen zum Verarbeiten von 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 Unterstützung für die Turn-by-Turn-Navigation hinzuzufügen. Verwenden Sie im Event-Listener die folgenden Klassen und Enums, um die Turn-by-Turn-Navigation 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. „Unterwegs“, „Umleitung“ oder „Angehalten“.

  • GMSNavigationDrivingSide: Enum, das angibt, ob dieser Schritt auf einer Route mit Rechts- oder Linksverkehr liegt.

  • GMSNavigationManeuver – Enum, das die auszuführende Navigationsaktion definiert, z. B. „Links abbiegen“ oder „Rechts abbiegen“.

Unten sehen Sie Beispiel-Event-Listener für das didChangeNavInfo-Ereignis:

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

Verwenden Sie die Property navState von GMSNavigationNavInfo, um den aktuellen Navigationsstatus abzurufen. Dieser kann einer der folgenden Werte sein:

  • Unterwegs: Der Status GMSNavigationNavStateEnroute bedeutet, dass die Routenführung aktiv ist und sich der Nutzer auf der angegebenen Route befindet. Informationen zum aktuellen bevorstehenden Manöver sind verfügbar.

  • Rerouting – GMSNavigationNavStateRerouting bedeutet, dass die Navigation läuft, aber nach einer neuen Route gesucht wird. Der nächste Manöver-Schritt ist nicht verfügbar, da es noch keine neue Route gibt.

  • Beendet – GMSNavigationNavStateStopped: Die Navigation wurde beendet. Die Navigation wird beispielsweise beendet, wenn der Nutzer die Navigation in der App beendet. In der Beispiel-App wird durch den Status GMSNavigationNavStateStopped die Anzeige der Navigationsinformationen gelöscht, damit keine Schrittanleitungen mehr angezeigt werden.

Spurführung

Im Navigation SDK werden Fahrspuren auf der Navigationskarte als GMSNavigationLane- und GMSNavigationLaneDirection-Datenobjekte dargestellt. Ein GMSNavigationLane-Objekt stellt eine bestimmte Fahrspur während der Navigation dar und enthält eine Liste von GMSNavigationLaneDirection-Objekten, die alle Abbiegungen beschreiben, die von dieser Fahrspur aus möglich sind.

Die empfohlene Richtung, die ein Fahrer auf einer Fahrspur einschlagen sollte, wird mit dem Feld recommended markiert.

Beispiel für die Spurführung

Der folgende Ausschnitt veranschaulicht die Datendarstellung der im vorherigen Screenshot gezeigten Spalten.

// 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 Fahrspur-Bildern für jeden Navigationsschritt, wie durch GMSNavigationStepInfo angegeben. Diese Symbole entsprechen den Richtlinien zur Bildgröße für 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 Fahrmanöver erstellen

Symbol für ein Manöver

Das Enum GMSNavigationManeuver definiert alle möglichen Manöver, die während der Navigation auftreten können. Das Manöver für einen bestimmten Schritt erhalten Sie über die Eigenschaft maneuver von GMSNavigationStepInfo.

Sie müssen Manöversymbole erstellen und sie mit den zugehörigen Manövern verknüpfen. Für einige Manöver können Sie eine 1:1-Zuordnung zu einem Symbol einrichten, z. B. GMSNavigationManeuverDestinationLeft und GMSNavigationManeuverDestinationRight. Da einige Fahrmanöver jedoch Merkmale mit anderen Fahrmanövern gemeinsam haben, sollten Sie möglicherweise mehr als ein Fahrmanöver einem einzelnen Symbol zuordnen. Beispielsweise könnten sowohl GMSNavigationManeuverTurnLeft als auch GMSNavigationManeuverOnRampLeft dem Symbol für das Linksabbiegen zugeordnet werden.

Einige Manöver enthalten das zusätzliche 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 Autofahrer beispielsweise im Uhrzeigersinn durch einen Kreisverkehr oder machen eine Kehrtwende, während in Ländern mit Rechtsverkehr gegen den Uhrzeigersinn gefahren wird. Das Navigation SDK erkennt, ob ein Manöver im Links- oder Rechtsverkehr stattfindet, und gibt das entsprechende Manöver aus. Daher kann sich das Manöversymbol für ein Manöver im Uhrzeigersinn von dem für ein Manöver gegen den Uhrzeigersinn unterscheiden.

Maximieren, um Beispiele für Symbole für verschiedene Fahrmanöver zu sehen

Beispielsymbol 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 Manöversymbolen für eine bestimmte GMSNavigationStepInfo. Diese Symbole entsprechen den Richtlinien zur Bildgröße für 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];