Szczegóły dotyczące pliku danych zakręt po zakręcie

Plik danych szczegółowych wskazówek dojazdu zawiera informacje dotyczące tylko nawigacji i jest przeznaczony dla urządzeń, które nie są przystosowane do nawigacji opartej na mapach. Zawiera on informacje o zbliżających się manewrach z elementami, które podajesz:

  • ikony (w lewo, w prawo, zawracanie);
  • numery zjazdów z ronda;
  • nazwy dróg;
  • szacowane odległości i czas do następnego kroku nawigacji lub miejsca docelowego.

Pliku danych szczegółowych wskazówek dojazdu możesz używać do tworzenia funkcji, w których pełny interfejs pakietu SDK do nawigacji nie jest odpowiedni, np. w przypadku wyświetlaczy o małym ekranie. Możesz go na przykład używać w przypadku kierowców pojazdów dwukołowych, którym możesz wyświetlać wskazówki dotyczące tylko nawigacji, aby pomóc im szybciej i pewniej dotrzeć do celu przy minimalnym rozpraszaniu uwagi.

Podstawowe elementy wyświetlane podczas nawigacji

Ekran telefonu komórkowego, na którym widać zbliżający się skręt w prawo za 15 metrów w ulicę Church Street. U dołu ekranu wyświetla się czas pozostały do celu – 13 minut – i odległość do pokonania – 2,1 mili.

Główne pola dla każdego kroku nawigacji to pełna nazwa drogi, manewr i całkowita odległość kroku, które są dostępne w GMSNavigationStepInfo.

W przypadku całej podróży możesz wyświetlać pozostały czas i odległość do bieżącego kroku lub miejsca docelowego. Wszystkie te informacje są dostępne w GMSNavigationNavInfo. Obraz po prawej stronie przedstawia przykład tych podstawowych elementów nawigacji.

Konfigurowanie detektora zdarzeń

Aby używać danych dotyczących tylko nawigacji, musisz zaimplementować detektor zdarzeń dla zdarzenia didChangeNavInfo. W detektorze zdarzeń uzyskaj dostęp do informacji o podróży i krokach, aby zapewnić użytkownikom szczegółowe wskazówki dojazdu.

Aby zaimplementować moduły obsługi zdarzeń, kontroler widoku mapy musi zaimplementować GMSNavigatorListener protokół. Szczegółowe informacje o obsłudze zdarzeń w pakiecie SDK do nawigacji na iOS znajdziesz w artykule Nasłuchiwanie zdarzeń nawigacyjnych.

Obsługa zdarzenia didChangeNavInfo

Utwórz detektor zdarzeń didChangeNavInfo, aby dodać do aplikacji obsługę szczegółowych wskazówek dojazdu. W detektorze zdarzeń użyj tych klas i wartości typu enum, aby sterować szczegółowymi wskazówkami dojazdu:

  • GMSNavigationNavInfo – klasa definiująca informacje o stanie nawigacji.

  • GMSNavigationStepInfo – klasa definiująca informacje o pojedynczym kroku na trasie nawigacji.

  • GMSNavigationNavState – wartość typu enum definiująca bieżący stan nawigacji, np. w trasie, zmiana trasy lub zatrzymanie.

  • GMSNavigationDrivingSide – wartość typu enum określająca, czy ten krok znajduje się na trasie, na której obowiązuje ruch prawostronny czy lewostronny.

  • GMSNavigationManeuver – wartość typu enum definiująca działanie nawigacyjne, które należy wykonać, np. skręcić w lewo lub w prawo.

Poniżej znajdziesz przykładowe detektory zdarzeń dla zdarzenia 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;
        ...
      }
    }
    ...
  }

Aby uzyskać bieżący stan nawigacji, użyj właściwości navState klasy GMSNavigationNavInfo . Może ona przyjmować jedną z tych wartości:

  • Enroute – stan GMSNavigationNavStateEnroute oznacza, że nawigacja z przewodnikiem jest aktywna, a użytkownik znajduje się na podanej trasie. Dostępne są informacje o bieżącym zbliżającym się kroku manewru.

  • ReroutingGMSNavigationNavStateRerouting oznacza, że nawigacja jest w toku, ale nawigator szuka nowej trasy. Zbliżający się krok manewru nie jest dostępny, ponieważ nie ma jeszcze nowej trasy.

  • ZatrzymanoGMSNavigationNavStateStopped oznacza, że nawigacja została zakończona. Nawigacja zatrzymuje się na przykład, gdy użytkownik wyjdzie z nawigacji w aplikacji. W przykładowej aplikacji stan GMSNavigationNavStateStopped czyści wyświetlanie informacji o nawigacji, aby zapobiec wyświetlaniu się instrukcji dotyczących poprzednich kroków.

Asystent pasa ruchu

Pakiet SDK do nawigacji reprezentuje pasy ruchu na karcie nawigacji jako GMSNavigationLane i GMSNavigationLaneDirection obiekty danych. Obiekt GMSNavigationLane reprezentuje konkretny pas ruchu podczas nawigacji i zawiera listę GMSNavigationLaneDirection obiektów, które opisują wszystkie skręty, jakie można wykonać z tego pasa ruchu.

Zalecany kierunek, w którym kierowca powinien jechać na pasie ruchu, jest oznaczony za pomocą pola recommended.

Przykład asystenta pasa ruchu

Ten fragment kodu ilustruje reprezentację danych pasów ruchu wyświetlanych na poprzednim zrzucie ekranu.

// 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}]

Obrazy asystenta pasa ruchu

Pakiet SDK do nawigacji obsługuje generowanie obrazów pasów ruchu dla każdego kroku nawigacji, zgodnie z informacjami przekazywanymi przez GMSNavigationStepInfo. Te ikony są zgodne z wytycznymi dotyczącymi rozmiarów obrazów w CarPlay's image sizing guidance.

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

Tworzenie ikon manewrów

Ikona manewru

Wartość typu GMSNavigationManeuver enum definiuje każdy możliwy manewr, który może wystąpić podczas nawigacji. Manewr dla danego kroku możesz uzyskać z właściwości maneuver klasy GMSNavigationStepInfo.

Musisz utworzyć ikony manewrów i powiązać je z odpowiednimi manewrami. W przypadku niektórych manewrów możesz skonfigurować mapowanie 1:1 na ikonę, np. GMSNavigationManeuverDestinationLeft i GMSNavigationManeuverDestinationRight. Ponieważ jednak niektóre manewry mają wspólne cechy, możesz zmapować więcej niż 1 manewr na jedną ikonę. Na przykład GMSNavigationManeuverTurnLeft i GMSNavigationManeuverOnRampLeft mogą być zmapowane na ikonę skrętu w lewo.

Niektóre manewry zawierają dodatkową etykietę „Zgodnie z ruchem wskazówek zegara” lub „Przeciwnie do ruchu wskazówek zegara”, którą pakiet SDK określa na podstawie strony, po której obowiązuje ruch w danym kraju. Na przykład w krajach, w których obowiązuje ruch lewostronny, kierowcy skręcają na rondzie lub zawracają zgodnie z ruchem wskazówek zegara, a w krajach, w których obowiązuje ruch prawostronny – przeciwnie do ruchu wskazówek zegara. Pakiet SDK do nawigacji wykrywa, czy manewr występuje w ruchu lewostronnym czy prawostronnym, i wyświetla odpowiedni manewr. Dlatego ikona manewru może się różnić w zależności od tego, czy manewr jest wykonywany zgodnie z ruchem wskazówek zegara czy przeciwnie do niego.

Rozwiń, aby zobaczyć przykłady ikon różnych manewrów

Przykładowa ikona Manewry szczegółowych wskazówek dojazdu
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

Używanie wygenerowanych ikon

Pakiet SDK do nawigacji obsługuje generowanie ikon manewrów dla danego GMSNavigationStepInfo. Te ikony są zgodne z wytycznymi dotyczącymi rozmiarów obrazów w CarPlay guidance.

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