Włącz szczegółowy plik danych

Plik danych zakręt po zakręcie dostarcza informacji tylko do nawigacji na urządzeniach, które nie są przeznaczone do nawigacji opartej na mapie. Zapewnia on potrzebne elementy na kolejne manewry:

  • ikony (w lewo, w prawo, z obracaniem)
  • numery do skrętu na rondach
  • nazwy dróg
  • szacowanych odległości i czasu do następnego etapu nawigacji lub miejsca docelowego,

Dzięki kanałowi zakręt po zakręcie możesz tworzyć miejsca, w których pełny interfejs użytkownika pakietu SDK nawigacji nie jest odpowiedni, np. w przypadku małych ekranów. Możesz na przykład użyć tej opcji w przypadku osób poruszających się pojazdami dwukołowymi, gdzie możesz wyświetlać wskazówki tylko z nawigacji, które pomogą im szybciej i pewniej dotrzeć do celu bez rozpraszania uwagi.

Podstawowe elementy wyświetlacza nawigacji

Ekran telefonu komórkowego, na którym widać nadchodzący skręt w lewo za 30 metrów na W Ahwanee Ave. U dołu ekranu czas pozostały do celu podróży to 46 minut, a odległość – 59 mil.

Pola podstawowe dla każdego etapu nawigacji to pełna nazwa drogi, kierunek i całkowita odległość kroku, które są dostępne w GMSNavigationStepInfo.

Dla całej podróży możesz wyświetlić pozostały czas i odległość do bieżącego kroku lub do miejsca docelowego – wszystkie te informacje znajdziesz w narzędziu GMSNavigationNavInfo. Ilustracja po prawej stronie przedstawia przykład tych niezbędnych elementów nawigacyjnych.

Konfigurowanie odbiornika

Aby używać danych tylko do nawigacji, musisz zaimplementować odbiornik zdarzenia didChangeNavInfo. W detektorze zdarzeń uzyskasz dostęp do informacji o podróży i krokach, aby zapewnić użytkownikom zakręt po kolei.

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

Obsługa zdarzenia didChangeNavInfo

Utwórz odbiornik zdarzenia didChangeNavInfo, by dodać obsługę szczegółowej nawigacji do aplikacji. W detektorze zdarzeń używaj tych klas i wyliczeń, aby kontrolować nawigację zakręt po zakręcie:

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

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

  • GMSNavigationNavState – Enum definiujący bieżący stan nawigacji, np. przekierowanie, zmiana trasy lub zatrzymanie.

  • GMSNavigationDrivingSide – Enum określające, czy krok odbywa się na trasie z prawej strony czy z nawigacją z lewej strony.

  • GMSNavigationManeuver – Enum określająca działanie nawigacyjne, które należy wykonać, np. skręt w lewo lub w prawo.

Poniżej znajdziesz przykładowe detektory zdarzenia didChangeNavInfo:

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

Aby poznać bieżący stan nawigacji, użyj właściwości navState obiektu GMSNavigationNavInfo:

  • Wyjście – stan GMSNavigationNavStateEnroute oznacza, że nawigacja z przewodnikiem jest obecnie aktywna, a użytkownik znajduje się na podanej trasie. Dostępne są informacje o nadchodzącym kroku.

  • Zmiana trasyGMSNavigationNavStateRerouting oznacza, że trwa nawigacja, ale nawigacja szuka nowej trasy. Nie można wykonać kolejnego kroku, ponieważ nie została jeszcze wyznaczana nowa trasa.

  • ZatrzymaneGMSNavigationNavStateStopped oznacza, że nawigacja się zakończyła. Na przykład nawigacja zatrzymuje się, gdy użytkownik zamknie nawigację w aplikacji. W przykładowej aplikacji stan GMSNavigationNavStateStopped czyści wyświetlane informacje o nawigacji, aby zapobiec wyświetlaniu kolejnych instrukcji dotyczących kroków.

Tworzenie ikon manewrów

Wyliczenie GMSNavigationManeuver definiuje każdy manewr, który może wystąpić podczas nawigacji. Procedura dla danego kroku jest dostępna z poziomu właściwości maneuver GMSNavigationStepInfo.

Musisz utworzyć ikony manewrów i powiązać je z odpowiednimi czynnościami. W przypadku niektórych manewrów możesz skonfigurować mapowanie 1:1 na ikonę, np. GMSNavigationManeuverDestinationLeft i GMSNavigationManeuverDestinationRight. Ponieważ jednak niektóre manewry mają te same cechy co inne, możesz przypisać więcej niż 1 mechanizm do jednej ikony. Na przykład GMSNavigationManeuverTurnLeft i GMSNavigationManeuverOnRampLeft mogą być zmapowane na ikonę skrętu w lewo.

Niektóre manewry zawierają dodatkową etykietę „W prawo” lub „W lewo”, którą pakiet SDK określa na podstawie ruchu w danym kraju. Na przykład w krajach, w których kierowcy jeżdżą po lewej stronie drogi, kierowcy poruszają się rondem lub zakręć w kierunku zgodnym z ruchem wskazówek zegara, a osoby po prawej stronie drogi – w przeciwnym kierunku. Pakiet Navigation SDK wykrywa, czy ruch ma miejsce w ruchu po lewej czy prawej stronie, i podejmuje właściwy ruch. W związku z tym ikona manewru może być inna w przypadku przesuwania w prawo i w lewo.

Rozwiń, aby zobaczyć przykładowe ikony różnych czynności

Przykładowa ikona Manewry zakręt po zakręcie
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