Plik danych szczegółowych wskazówek dojazdu zawiera informacje tylko o nawigacji i jest przeznaczony dla urządzeń, które nie są przystosowane do nawigacji opartej na mapach. Zawiera 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 Navigation SDK nie jest odpowiedni, np. w przypadku wyświetlaczy o małych ekranach. Możesz go używać np. w przypadku kierowców pojazdów dwukołowych, którym możesz wyświetlać wskazówki tylko dotyczące nawigacji, aby pomóc im szybciej i pewniej dotrzeć do celu przy minimalnym rozpraszaniu uwagi.
Podstawowe elementy wyświetlacza nawigacji
Główne pola każdego kroku nawigacji to pełna nazwa drogi,
manewr i łączna 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 tylko o nawigacji, musisz zaimplementować detektor zdarzeń didChangeNavInfo. W detektorze zdarzeń uzyskaj dostęp do informacji o podróży i krokach, aby udostępnić 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 Navigation SDK na iOS znajdziesz w artykule Nasłuchiwanie zdarzeń nawigacji.
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 wyliczeń, 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– typ wyliczeniowy definiujący bieżący stan nawigacji, np. w trasie, zmiana trasy lub zatrzymanie.GMSNavigationDrivingSide– wyliczenie określające, czy ten krok jest na trasie, na której obowiązuje ruch prawostronny czy lewostronny.GMSNavigationManeuver— typ wyliczeniowy definiujący działanie nawigacyjne, które należy wykonać, np. skręć w lewo lub skręć w prawo.
Poniżej znajdziesz przykładowe detektory zdarzeń 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; ... } } ... }
Stany nawigacji
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
GMSNavigationNavStateEnrouteoznacza, że aktywna jest nawigacja z przewodnikiem i użytkownik znajduje się na podanej trasie. Dostępne są informacje o bieżącym zbliżającym się kroku manewru.Rerouting –
GMSNavigationNavStateReroutingoznacza, że nawigacja jest w toku, ale nawigator szuka nowej trasy. Zbliżający się krok manewru jest niedostępny, ponieważ nie ma jeszcze nowej trasy.Zatrzymano –
GMSNavigationNavStateStoppedoznacza, że nawigacja się zakończyła. Nawigacja zatrzymuje się np., gdy użytkownik wyjdzie z nawigacji w aplikacji. W przykładowej aplikacji stanGMSNavigationNavStateStoppedczyści wyświetlacz informacji o nawigacji, aby zapobiec wyświetlaniu instrukcji dotyczących poprzedniego kroku.
Asystent pasa ruchu
Pakiet Navigation SDK 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 Navigation SDK 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
![]()
Wyliczenie GMSNavigationManeuver
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 z innymi manewrami, 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 drogi, 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 Navigation SDK 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 |
|---|---|
![]() |
DEPARTUNKNOWN |
![]() |
STRAIGHTON_RAMP_UNSPECIFIEDOFF_RAMP_UNSPECIFIEDNAME_CHANGE
|
![]() |
TURN_RIGHTON_RAMP_RIGHT
|
![]() |
TURN_LEFTON_RAMP_LEFT
|
![]() |
TURN_SLIGHT_RIGHTON_RAMP_SLIGHT_RIGHTOFF_RAMP_SLIGHT_RIGHT
|
![]() |
TURN_SLIGHT_LEFTON_RAMP_SLIGHT_LEFTOFF_RAMP_SLIGHT_LEFT
|
![]() |
TURN_SHARP_RIGHTON_RAMP_SHARP_RIGHTOFF_RAMP_SHARP_RIGHT
|
![]() |
TURN_SHARP_LEFTON_RAMP_SHARP_LEFTOFF_RAMP_SHARP_LEFT
|
![]() |
TURN_U_TURN_COUNTERCLOCKWISEON_RAMP_U_TURN_COUNTERCLOCKWISEOFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
![]() |
TURN_U_TURN_CLOCKWISEON_RAMP_U_TURN_CLOCKWISEOFF_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_RIGHTOFF_RAMP_RIGHT
|
![]() |
MERGE_LEFTOFF_RAMP_LEFT
|
![]() |
FORK_RIGHTTURN_KEEP_RIGHTON_RAMP_KEEP_RIGHTOFF_RAMP_KEEP_RIGHT
|
![]() |
FORK_LEFTTURN_KEEP_LEFTON_RAMP_KEEP_LEFTOFF_RAMP_KEEP_LEFT
|
![]() |
MERGE_UNSPECIFIED
|
![]() |
DESTINATION
|
![]() |
DESTINATION_RIGHT
|
![]() |
DESTINATION_LEFT
|
![]() |
FERRY_BOAT
|
![]() |
FERRY_TRAIN
|
Używanie wygenerowanych ikon
Pakiet Navigation SDK 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];







































