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
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 ... } } } }
Stany nawigacji
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 trasy –
GMSNavigationNavStateRerouting
oznacza, że trwa nawigacja, ale nawigacja szuka nowej trasy. Nie można wykonać kolejnego kroku, ponieważ nie została jeszcze wyznaczana nowa trasa.Zatrzymane –
GMSNavigationNavStateStopped
oznacza, że nawigacja się zakończyła. Na przykład nawigacja zatrzymuje się, gdy użytkownik zamknie nawigację w aplikacji. W przykładowej aplikacji stanGMSNavigationNavStateStopped
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
|