Wykrywaj zdarzenia nawigacji

Ten przewodnik pozwoli Ci włączyć w aplikacji nasłuchiwanie różnych zdarzeń, które zmieniają się, gdy użytkownik porusza się po trasie, i reagowanie na nie. Nie opisujemy tu definiowania trasy, a jedynie odpowiadanie na zdarzenia na trasie.

Przegląd

Pakiet Navigation SDK na iOS udostępnia detektory powiązane z lokalizacją użytkownika i warunkami na trasie, a także ważne dane o czasie i dystansie. W kontrolerze widoku mapy aplikacja musi przyjąć protokoły dla tych detektorów: GMSRoadSnappedLocationProviderListener i GMSNavigatorListener.

Ta lista zawiera metody detektora dostępne w przypadku zdarzeń nawigacji:

Wyświetl kod

Deklaracja zgodności z wymaganymi protokołami

Przed zaimplementowaniem metod nawigacyjnych kontroler widoku musi przyjąć protokoły:

Swift

class ViewController: UIViewController, GMSNavigatorListener, GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <gmsnavigatorlistener, gmsroadsnappedlocationproviderlistener=""></gmsnavigatorlistener,>

@koniec

Po wdrożeniu protokołów nawigacyjnych ustaw detektory na kontroler widoku. Możesz na przykład dodać ten kod do metody viewDidLoad().

Swift

mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)

Objective-C

[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider addListener:self];

Otrzymywanie lub zatrzymywanie aktualizacji lokalizacji

Aby wyświetlać na mapie postępy użytkownika, wymagana jest aktualizacja lokalizacji.

Instancja location udostępnia te właściwości:

Usługa lokalizacji Opis
wysokość n.p.m. Aktualna wysokość.
coordinate.latitude Bieżąca współrzędna szerokości geograficznej nałożonej na drogę.
coordinate.longitude Bieżąca współrzędna długości geograficznej nałożonej na drogę.
szkolenie Obecne odchylenie w stopniach.
szybkość Obecna prędkość.
sygnatura czasowa Data i godzina bieżącego odczytu.

Aby otrzymywać ciągłe aktualizacje lokalizacji, wywołaj metodę mapView.roadSnappedLocationProvider.startUpdatingLocation i użyj metody GMSRoadSnappedLocationProviderListener do obsługi zdarzenia didUpdateLocation.

Oto przykład wywoływania funkcji startUpdatingLocation:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatedLocation];

Poniższy kod tworzy GMSRoadSnappedLocationProviderListener, który obsługuje zdarzenie didUpdateLocation.

Swift

func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider, didUpdate location: CLLocation) { print("Location: (location.description)") }

Objective-C

  • (void)locationProvider:(GMSRoadSnappedLocationProvider *)locationProvider didUpdateLocation:(CLLocation *)location { NSLog(@"Location: %@", location.description); }

Aby otrzymywać aktualizacje lokalizacji, gdy aplikacja działa w tle, ustaw allowsBackgroundLocationUpdates na wartość true:

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true (prawda)

Objective-C

_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

Wykrywanie zdarzeń przyjazdu

Aplikacja używa zdarzenia didArriveAtWaypoint do wykrywania, kiedy dotarło się miejsce docelowe. Aby wznowić nawigację i przejść do następnego punktu na trasie, wywołaj continueToNextDestination(), a następnie ponownie włącz wskazówki. Aplikacja musi ponownie włączyć wskazówki po wywołaniu funkcji continueToNextDestination().

Po wywołaniu przez aplikację funkcji continueToNextDestination nawigator nie będzie już mieć danych o poprzednim miejscu docelowym. Jeśli chcesz przeanalizować informacje o danym etapie trasy, musisz pobrać je z nawigatora przed wywołaniem funkcji continueToNextDestination().

Następujący przykładowy kod pokazuje metodę obsługi zdarzenia didArriveAtWaypoint:

Swift

func navigator(_ navigator: GMSNavigator, didInviteAt sposóbpoint: GMS NavigationWaypoint) { print("Dotarłeś do: (waypoint.title)") mapView.navigator?.continueToNextDestination() mapView.navigator?.isGuidanceActive = true }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didInviteAtWaypoint:(GMSnavigationWaypoint *)waypoint { NSLog(@"Dotarł na miejsce: %@", sposóbpoint.title); [_mapView.navigator continueToNextDestination]; _mapView.navigator.guidanceActive = YES;

Odbieram aktualizacje o zmianie trasy

Aby otrzymywać powiadomienia po każdej zmianie trasy, utwórz metodę obsługi zdarzenia navigatorDidChangeRoute. Aby uzyskać dostęp do nowej trasy, skorzystaj z właściwości routeLegs i currentRouteLeg obiektu GMSNavigator.

Swift

func navigator DidChangeRoute(_ navigator: GMSNavigator) { print("Trasa się zmieniła.") }

Objective-C

  • (void)navigator DidChangeRoute:(GMSNavigator *)navigator { NSLog(@"Trasa została zmieniona."); }

Czas otrzymywania aktualizacji miejsca docelowego

Aby otrzymywać aktualizacje na bieżąco do miejsca docelowego, utwórz metodę do obsługi zdarzenia didUpdateRemainingTime. Parametr time podaje szacowany czas (w sekundach) do osiągnięcia następnego miejsca docelowego.

Swift

func navigator(_ navigator: GMSNavigator, didUpdateLastTime time: TimeInterval) { press("Czas do następnego miejsca docelowego: (czas)") }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didUpdateDetailsTime:(NSTimeInterval)time { NSLog(@"Time to next destination: %f", time); }

Aby ustawić minimalną zmianę szacowanego czasu do następnego miejsca docelowego, ustaw właściwość timeUpdateThreshold na GMSNavigator. Wartość jest podawana w sekundach. Jeśli ta właściwość jest nieskonfigurowana, usługi używają wartości domyślnej wynoszącej 1 sekundę.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Odbieram aktualizacje o odległości do miejsca docelowego

Aby otrzymywać aktualizacje o stałej odległości do miejsca docelowego, utwórz metodę obsługi zdarzenia didUpdateRemainingDistance. Parametr distance podaje szacunkową odległość (w metrach) do następnego miejsca docelowego.

Swift

func navigator(_ navigator: GMSNavigator, didUpdateLastOdległość odległość: CLLocationLocation) { let minutes = odległość * 0.00062137 press("Odległość do następnego miejsca docelowego: (mile) mile.") }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didUpdateDetailsRange:(CLLocationLocation)distance { doublemile = distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Odległość do następnego miejsca docelowego: %.2f.", mile]); }

Aby ustawić minimalną zmianę szacowanej odległości do następnego miejsca docelowego, ustaw właściwość distanceUpdateThreshold na GMSNavigator (wartość jest podawana w metrach). Jeśli ta właściwość nie jest skonfigurowana, usługi używają wartości domyślnej 1 metra.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Otrzymywanie aktualnych informacji o natężeniu ruchu

Aby otrzymywać ciągłe aktualizacje przepływu ruchu na pozostałej trasie, utwórz metodę do obsługi zdarzenia didUpdateDelayCategory. Wywołanie delayCategoryToNextDestination zwraca wartość GMSNavigationDelayCategory, która podaje wartość od 0 do 3. Zmiany w kategorii zależą od bieżącej pozycji użytkownika aplikacji. Jeśli dane o ruchu są niedostępne, GMSNavigationDelayCategory zwraca wartość 0. Liczby 1–3 wskazują na rosnący przepływ ze lekkich do intensywnych.

Swift

func navigator(_ navigator: GMSNavigator, DidUpdate delayCategory: GMSNawigacja OpóźnienieCategory) {print("Przepływ ruchu do następnego miejsca docelowego: (delayCategory)") }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didUpdateDurationCategory:(GMS Navigation OpóźnienieCategory)delayCategory { NSLog(@"Przepływ ruchu do następnego miejsca docelowego: %ld", (long)delayCategory); }

Właściwość GMSNavigationDelayCategory ujawnia te poziomy opóźnienia:

Kategoria opóźnienia Opis
GMSNavigationDelayCategoryNoData 0 – niedostępne, brak danych o ruchu lub :
trasę.
GMSNavigationDelayCategoryHeavy 1 – ciężki.
GMSNavigationDelayCategoryMedium 2 – Średni.
GMSNavigationDelayCategoryLight 3 – jasny.

Otrzymuję powiadomienia o przekroczeniu prędkości

Aby otrzymywać powiadomienia o przekroczeniu dozwolonej prędkości przez kierowcę, utwórz metodę obsługi zdarzenia didUpdateSpeedingPercentage.

Swift

// Detektor obsługujący zdarzenia związane z prędkością. func navigator( _ navigator: GMSNavigator, didUpdateSpeedingPercentageAboveLimit: CGFloat ) { print("Prędkość jest (percentageAboveLimit) powyżej limitu.") }

Objective-C

// Detektor do obsługi zdarzeń związanych z prędkością. - (void)navigator:(GMSNavigator *)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit { NSLog(@"Speed is %f percent over the limit.", percentageAboveLimit); }

Zmieniam sugerowany tryb oświetlenia

Aby otrzymywać powiadomienia o szacunkowych zmianach w oświetleniu, utwórz metodę obsługi zdarzenia didChangeSuggestedLightingMode.

Swift

// Zdefiniuj odbiornik sugerowanych zmian w trybie oświetlenia. func navigator(_ navigator: GMSNavigator, didChangeSubmitLightingMode EquipmentMode: GMSnavigationLightingMode) { press("Proponowany tryb oświetlenia uległ zmianie: (String(decribe: uwzględnioneMode))")

// Wprowadź sugerowaną zmianę. mapView.lightingMode = lampMode }

Objective-C

// Określ odbiornik sugerowanych zmian w trybie oświetlenia. -(void)navigator:(GMSNavigator *)navigator didChangeUpdatedLightingMode: (GMS NavigationLightingMode)lightingMode { NSLog(@"Sugerowany tryb oświetlenia został zmieniony: %ld", (long)lightingMode);

// Wprowadź sugerowaną zmianę. _mapView.lightingMode = lampMode; }