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
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; ... } } ... }
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 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.Rerouting –
GMSNavigationNavStateReroutingoznacza, ż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.Zatrzymano –
GMSNavigationNavStateStoppedoznacza, że nawigacja została zakończona. Nawigacja zatrzymuje się na przykład, gdy użytkownik wyjdzie z nawigacji w aplikacji. W przykładowej aplikacji stanGMSNavigationNavStateStoppedczyś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
![]()
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 |
|---|---|
![]() |
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 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];







































