Pliki danych z informacjami krok po kroku zawierają informacje nawigacyjne przeznaczone do urządzeń, które nie są przeznaczone do nawigacji na mapie. Umożliwia to uwzględnienie nadchodzących manewrów z uwzględnieniem podanych przez Ciebie elementów:
- ikony (skręt w lewo, w prawo, zawracanie)
- numery na rondzie
- nazwy dróg,
- szacowane odległości i czas do następnego etapu nawigacji lub docelowego miejsca docelowego;
Możesz użyć danych wskazówek do tworzenia funkcji, w których pełny interfejs Navigation SDK nie jest odpowiedni, np. na małych ekranach. Możesz na przykład wyświetlać wskazówki tylko do nawigacji, aby pomóc użytkownikom pojazdów dwukołowych szybciej i pewniej dotrzeć do celu, przy minimalnych rozpraszających czynnikach.
Podstawowe elementy wyświetlania nawigacji
Główne pola 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świetlić pozostały czas i odległość do bieżącego kroku lub do 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 do nawigacji, musisz zaimplementować detektor zdarzeń didChangeNavInfo
. W słuchaczu zdarzeń uzyskuj informacje o trasie i kroku, aby zapewnić użytkownikom nawigację krok po kroku.
Aby zaimplementować metody obsługi zdarzeń, kontroler widoku mapy musi zaimplementować protokół GMSNavigatorListener
. Szczegółowe informacje o obsługiwaniu zdarzeń w pakiecie Navigation SDK na iOS znajdziesz w artykule Nasłuchiwanie zdarzeń nawigacji.
Obsługa zdarzenia didChangeNavInfo
Aby dodać do aplikacji obsługę nawigacji krok po kroku, utwórz odbiornik dla zdarzenia didChangeNavInfo
. W odbiorniku zdarzenia użyj tych klas i typów enumeracji, aby sterować nawigacją krok po kroku:
GMSNavigationNavInfo
— Klasa definiująca informacje o stanie nawigacji.GMSNavigationStepInfo
– klasa definiująca informacje o pojedynczym kroku na trasie nawigacyjnej.GMSNavigationNavState
— Enum określający bieżący stan nawigacji, np. w drodze, przekierowanie lub zatrzymanie.GMSNavigationDrivingSide
— Enum określający, czy ten krok jest na trasie z kierunkiem jazdy po prawej czy po lewej stronie.GMSNavigationManeuver
— Enum określający działanie nawigacyjne do wykonania, np. skręć w lewo lub w prawo.
Poniżej znajdziesz przykładowe detektory zdarzeń 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
Użyj właściwości navState
obiektu GMSNavigationNavInfo
, aby uzyskać bieżący stan nawigacji, który może być jeden z tych:
W drodze – stan
GMSNavigationNavStateEnroute
oznacza, że nawigacja przewodnikiem jest obecnie aktywna, a użytkownik znajduje się na wskazanej trasie. Informacje o kroku, który ma być wykonany w ramach bieżącego manewru, są dostępne.Zmiana trasy –
GMSNavigationNavStateRerouting
oznacza, że nawigacja jest w trakcie, ale nawigator szuka nowej trasy. Następny krok manewru jest niedostępny, ponieważ nie ma jeszcze nowej trasy.Zatrzymano
GMSNavigationNavStateStopped
oznacza, że nawigacja została zakończona. Na przykład nawigacja kończy się, gdy użytkownik ją zamknie. W przypadku aplikacji przykładowej stanGMSNavigationNavStateStopped
powoduje wyczyszczenie informacji o nawigacji, aby zapobiec wyświetlaniu instrukcji z poprzedniego kroku.
Asystent pasa ruchu
Pakiet SDK nawigacji reprezentuje pasy na karcie skrętu w nawigacji jako obiekty danych GMSNavigationLane
i GMSNavigationLaneDirection
. Obiekt GMSNavigationLane
reprezentuje określony pas podczas nawigacji i zawiera listę obiektów GMSNavigationLaneDirection
, które opisują wszystkie zakręty, które można wykonać na tym pasie.
Pole recommended
wskazuje zalecany kierunek jazdy po pasie.
Przykład asystenta pasa ruchu
Poniższy fragment kodu przedstawia dane dotyczące pasów wyświetlone 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, jak podano w GMSNavigationStepInfo
. Te ikony są zgodne z zaleceniami dotyczącymi rozmiarów obrazów w CarPlay.
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
Enum GMSNavigationManeuver
definiuje wszystkie możliwe manewry, które mogą wystąpić podczas nawigacji. Manewr dla danego kroku można uzyskać z właściwości maneuver
obiektu GMSNavigationStepInfo
.
Musisz utworzyć ikony manewrów i sparować je z powiązanymi manewrami.
W przypadku niektórych manewrów możesz skonfigurować bezpośrednie mapowanie na ikonę, taką jak GMSNavigationManeuverDestinationLeft
i GMSNavigationManeuverDestinationRight
. Ponieważ jednak niektóre manewry mają wspólne cechy, możesz zmapować więcej niż jeden manewr do jednej ikony. Na przykład GMSNavigationManeuverTurnLeft
i GMSNavigationManeuverOnRampLeft
mogą być mapowane 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 strony jezdni w danym kraju. Na przykład w krajach, w których ruch odbywa się po lewej stronie drogi, kierowcy pokonują rondo lub wykonują manewr cofania zgodnie z kierunkiem ruchu wskazówek zegara, a w krajach, w których ruch odbywa się po prawej stronie drogi, – w przeciwnym kierunku. Pakiet SDK nawigacji wykrywa, czy manewr odbywa się po lewej czy po prawej stronie drogi, i wyświetla odpowiedni manewr. Dlatego ikona manewru może się różnić w zależności od tego, czy manewr odbywa się zgodnie z kierunkiem ruchu wskazówek zegara, czy przeciwnie do niego.
Rozwiń, aby zobaczyć przykłady ikon różnych manewrów
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
|
Używanie wygenerowanych ikon
Pakiet SDK do nawigacji obsługuje generowanie ikon manewrów dla danego GMSNavigationStepInfo
. Te ikony są zgodne z zaleceniami dotyczącymi rozmiaru obrazu w CarPlay.
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];