Detaillierten Turn Data-Feed aktivieren

Ein Datenfeed mit detaillierter Routenführung bietet nur Navigationsinformationen für Geräte, die nicht für die kartenbasierte Navigation entwickelt wurden. Sie ermöglicht bevorstehende Vorgehensweisen mit den von Ihnen bereitgestellten Elementen:

  • Symbole (links, rechts, wenden)
  • Nummern in Kreisverkehren abbiegen
  • Straßennamen
  • geschätzte Entfernungen und die Fahrzeit bis zum nächsten Navigationsschritt oder zum endgültigen Ziel

Sie können den detaillierten Feed verwenden, um Tests zu erstellen, bei denen die vollständige Benutzeroberfläche des Navigation SDK nicht geeignet ist, z. B. für kleine Bildschirme. Sie können dies beispielsweise für Fahrgäste von Zweirädern verwenden, bei denen Sie eine nur Navigation zur Verfügung stehende Anleitung projizieren können, damit sie ihre Ziele schneller und sicherer mit minimaler Ablenkung erreichen.

Wichtige Elemente der Navigationsanzeige

Ein Mobilgerät-Display, das eine bevorstehende Linksabbiegung in 30 Metern auf die W Ahwanee Ave anzeigt. Unten auf dem Bildschirm beträgt die verbleibende Zeit bis zum Ziel 46 Minuten und die verbleibende Entfernung beträgt 39 Meilen.

Die Hauptfelder für die einzelnen Navigationsschritte sind der vollständige Straßenname, die Fahrtrichtung und die Gesamtentfernung des Schritts. Diese Informationen 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, die alle in GMSNavigationNavInfo verfügbar sind. Das Bild auf der rechten Seite zeigt ein Beispiel für diese wesentlichen Navigationselemente.

Event-Listener einrichten

Wenn Sie Daten verwenden möchten, die ausschließlich zur Navigation dienen, müssen Sie für das Ereignis didChangeNavInfo einen Event-Listener implementieren. Greifen Sie im Event-Listener auf Fahrt- und Schrittinformationen zu, um Ihren Nutzern eine detaillierte Routenführung bereitzustellen.

Zur Implementierung von Event-Handlern muss der Ansichts-Controller der Karte das GMSNavigatorListener-Protokoll implementieren. Ausführliche Informationen zum Verarbeiten von Ereignissen im Navigation SDK for iOS finden Sie unter Auf Navigationsereignisse warten.

Umgang mit dem Ereignis „daddChangeNavInfo“

Erstellen Sie einen Listener für das didChangeNavInfo-Ereignis, um die detaillierte Routenführung in Ihre App einzubinden. Verwenden Sie im Event-Listener die folgenden Klassen und Enums, um die detaillierte Routenführung zu steuern:

  • GMSNavigationNavInfo – Klasse, die Informationen zum Navigationsstatus definiert.

  • GMSNavigationStepInfo: Klasse, die Informationen zu einem einzelnen Schritt entlang einer Navigationsroute definiert.

  • GMSNavigationNavState: Aufzählung, die den aktuellen Status einer Navigation definiert, z. B. unterwegs, neu berechnet oder angehalten.

  • GMSNavigationDrivingSide: Aufzählung, die festlegt, ob es sich bei diesem Schritt um eine Fahrt-auf-Rechts- oder eine Links-Fahrt-Route handelt.

  • GMSNavigationManeuver: Enum-Wert, mit dem die Navigationsaktion definiert wird, z. B. nach links oder rechts abbiegen.

Unten sehen Sie Beispiele für Event-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
          ...
        }
      }
    }
  }

Verwenden Sie die Eigenschaft navState von GMSNavigationNavInfo, um den aktuellen Navigationsstatus abzurufen:

  • Enroute: Der Status GMSNavigationNavStateEnroute bedeutet, dass die geführte Navigation derzeit aktiv ist und sich der Nutzer auf der angegebenen Route befindet. Es sind Informationen über den aktuellen anstehenden Schritt des Manövers verfügbar.

  • Neuberechnung: GMSNavigationNavStateRerouting bedeutet, dass die Navigation gerade läuft, aber im Navigator nach einer neuen Route gesucht wird. Der nächste Schritt für das Manövrieren ist nicht verfügbar, da es noch keine neue Route gibt.

  • 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 löscht der Zustand GMSNavigationNavStateStopped die Anzeige mit den Navigationsinformationen, um zu verhindern, dass anhaltende Schrittanweisungen angezeigt werden.

Symbole für Manöver erstellen

Der Enum GMSNavigationManeuver definiert alle möglichen Bewegungen während der Navigation. Sie können die Bewegung für einen bestimmten Schritt über die Eigenschaft maneuver von GMSNavigationStepInfo abrufen.

Sie müssen Symbole für Manöver erstellen und mit den entsprechenden Manövern koppeln. Bei einigen Manövern können Sie eine 1:1-Zuordnung zu einem Symbol einrichten, z. B. GMSNavigationManeuverDestinationLeft und GMSNavigationManeuverDestinationRight. Da einige Manöver jedoch gemeinsame Merkmale mit denen anderer Mittel haben, kann es sinnvoll sein, einem Symbol mehrere Manöver zuzuordnen. So können beispielsweise GMSNavigationManeuverTurnLeft und GMSNavigationManeuverOnRampLeft dem Linksabbiegesymbol zugeordnet werden.

Manche Manöver werden zusätzlich mit dem Label „Im Uhrzeigersinn“ oder „Gegen den Uhrzeigersinn“ gekennzeichnet, das vom SDK basierend auf der Fahrtseite eines Landes bestimmt wird. In Ländern, in denen Fahrzeuge auf der linken Straßenseite fahren, biegen sie beispielsweise im Uhrzeigersinn einen Kreisverkehr oder wenden sie im Uhrzeigersinn ab, während Länder, die auf der rechten Straßenseite fahren, entgegen dem Uhrzeigersinn fahren. Das Navigation SDK erkennt, ob ein Manöver im linken oder rechten Verkehr stattfindet, und gibt das entsprechende Manöver aus. Daher kann das Bewegungssymbol für eine Bewegung im und gegen den Uhrzeigersinn unterschiedlich sein.

Maximieren, um Beispielsymbole für verschiedene Manövern zu sehen

Beispielsymbol Detaillierte Routenführung
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