Navigasyon etkinliklerini dinleme

Uygulamanızın çeşitli etkinlikleri dinleyip yanıtlamasını sağlamak için bu kılavuzu kullanın ve kullanıcı bir rota boyunca gezindikçe değişen şekilde değişmesini sağlar. Bu kılavuz şunları kapsamaz: bir rota tanımlar, yalnızca rota üzerindeki etkinliklere yanıt verir.

Genel Bakış

iOS için Navigasyon SDK'sı size dinleyiciler sunar kullanıcının konumuyla ve rota üzerindeki koşullarla ilişkilidir. önemli zaman ve mesafe verilerini içerebilir. Haritanın görünüm denetleyicisinde uygulamanız protokolleri benimsemesi gerekir: GMSRoadSnappedLocationProviderListener ve GMSNavigatorListener.

Bu liste, gezinme etkinlikleri için kullanılabilecek işleyici yöntemlerini gösterir:

Kodu göster

Gerekli protokollere uygunluk bildiriliyor

Gezinme yöntemlerini uygulamadan önce görünüm denetleyicisinin protokoller:

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

Gezinme protokollerini uyguladıktan sonra dinleyicileri görünüme ayarlayın denetleyici. Örneğin, aşağıdaki kodu viewDidLoad() yöntemidir.

Swift

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

Objective-C

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

Konum güncellemeleri alma veya durdurma

Kullanıcının ilerlemesini haritada göstermek için konum güncellemeleri gereklidir.

location örneği aşağıdaki özellikleri sunar:

Konum özelliği Açıklama
rakım Mevcut rakım.
coordinate.latitude Yol kırpılmış mevcut enlem koordinatı.
coordinate.longitude Yola eklenmiş mevcut boylam koordinatı.
kurs Derece cinsinden mevcut değer.
hız Mevcut hız.
timestamp Geçerli okumanın tarihi/saati.

Sürekli konum güncellemelerini almak için şu numarayı arayın: mapView.roadSnappedLocationProvider.startUpdatingLocation ve didUpdateLocation için GMSRoadSnappedLocationProviderListener unutmayın.

Aşağıdaki örnekte startUpdatingLocation işlevinin çağrılması gösterilmektedir:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatingLocation];

Aşağıdaki kod, bir GMSRoadSnappedLocationProviderListener didUpdateLocation etkinliğini işler.

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); }

Uygulama arka plandayken konum güncellemeleri almak için şu ayarları yapın: Doğru değerine allowsBackgroundLocationUpdates:

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

Varış etkinliklerini algılama

Uygulamanız, bir hedefin aşağıdaki koşulları karşıladığını algılamak için didArriveAtWaypoint etkinliğini kullanır: sayısına ulaşıldı. Yönlendirmeyi devam ettirebilir ve bir sonraki ara noktaya ilerlemek için continueToNextDestination() numaralı telefonu aramak ve ardından rehberliği yeniden etkinleştirmek. Uygulamanız continueToNextDestination() çağrıldıktan sonra kılavuzu yeniden etkinleştirmelidir.

Uygulama continueToNextDestination çağırdıktan sonra, gezgin artık bir önceki hedefe ilişkin verileri içerir. Bir kullanıcı ile ilgili bilgileri analiz etmek rota ayağını çağırmadan önce bunu navigasyondan almanız gerekir continueToNextDestination()

Aşağıdaki kod örneğinde, didArriveAtWaypoint öğesini işlemek için bir yöntem gösterilmektedir etkinlik:

Swift

func navigator(_ navigator: GMSNavigator, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint { NSLog(@"You have
    arrived at: %@", waypoint.title); [_mapView.navigator
    continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }

Rota değişikliği güncellemeleri alınıyor

Rota değiştirildiğinde bir bildirim almak için şunu belirten bir yöntem oluşturun: navigatorDidChangeRoute etkinliğini işleyebilir. Yeni rotaya şu şekilde erişebilirsiniz: (GMSNavigator için routeLegs ve currentRouteLeg özellikleri kullanılır).

Swift

func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }

Objective-C

-   (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route
    has changed."); }

Hedef güncellemelerinin alınacağı süre

Hedef güncellemelerine kadar sürekli olarak süre almak için didUpdateRemainingTime etkinliği. time parametresi, süre, saniye cinsinden, sonraki hedefe ulaşılana kadar.

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time:
TimeInterval) { print("Time to next destination: \(time)") }

Objective-C

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

Bir sonraki hedefe giden tahmini süredeki minimum değişikliği belirlemek için GMSNavigator tarihinde timeUpdateThreshold mülk. Değer, saniye. Bu özellik ayarlanmazsa hizmetler varsayılan olarak 1 değerini kullanır tıklayın.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Hedefe olan mesafe güncellemeleri alınıyor

Hedef güncellemelerine sürekli olarak uzaklık bilgisi almak için kullanılacak bir yöntem oluşturun didUpdateRemainingDistance etkinliği. distance parametresi, tahmini mesafe (metre cinsinden)

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distance:
CLLocationDistance) { let miles = distance * 0.00062137 print("Distance to next
destination: \(miles) miles.") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateRemainingDistance:(CLLocationDistance)distance { double miles =
    distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Distance to
    next destination: %.2f.", miles]); }

Bir sonraki hedefe olan tahmini mesafedeki minimum değişikliği belirlemek için GMSNavigator üzerindeki distanceUpdateThreshold özelliği (değer metre). Bu özellik ayarlanmazsa hizmetler varsayılan olarak 1 değerini kullanır ölçer.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Trafik güncellemeleri alınıyor

Kalan rotadaki trafik akışıyla ilgili sürekli güncellemeleri almak için didUpdateDelayCategory etkinliğini işlemek için bir yöntem oluşturun. Bir delayCategoryToNextDestination, GMSNavigationDelayCategory değerini döndürür. 0 ile 3 arasında bir değer sağlar. Kategoride yapılan güncellemeler, şu anki Uygulama kullanıcısının konumu. Trafik verileri yoksa GMSNavigationDelayCategory, 0 değerini döndürür. 1-3 arasındaki sayılar, artan olduğunu gösterir hafiften yoğuna akış şeklinde gider.

Swift

func navigator(_ navigator: GMSNavigator, didUpdate delayCategory:
GMSNavigationDelayCategory) { print("Traffic flow to next destination:
\(delayCategory)") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory {
    NSLog(@"Traffic flow to next destination: %ld", (long)delayCategory); }

GMSNavigationDelayCategory özelliği aşağıdaki gecikme düzeylerini sunar:

Gecikme kategorisi Açıklama
GMSNavigationDelayCategoryNoData 0 - Kullanılamıyor, trafik için veri yok veya :
yol gösterir.
GMSNavigationDelayCategoryHeavy 1 - Şiddetli.
GMSNavigationDelayCategoryMedium 2 - Orta.
GMSNavigationDelayCategoryLight 3 - Hafif.

Hız güncellemeleri alınıyor

Bir sürücü hız sınırını aştığında güncelleme almak için bir yöntem oluşturun didUpdateSpeedingPercentage etkinliğini işlemek için gereklidir.

Swift

// Listener to handle speeding events. func navigator( _ navigator:
GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) {
print("Speed is \(percentageAboveLimit) above the limit.") }

Objective-C

// Listener to handle speeding events. - (void)navigator:(GMSNavigator
*)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit {
NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit); }

Önerilen ışık modu değiştiriliyor

Işıklandırmada tahmini olarak yapılan değişikliklerle ilgili güncellemeler almak için kullanılacak bir yöntem oluşturun didChangeSuggestedLightingMode etkinliği.

Swift

// Define a listener for suggested changes to lighting mode. func navigator(_
navigator: GMSNavigator, didChangeSuggestedLightingMode lightingMode:
GMSNavigationLightingMode) { print("Suggested lighting mode has changed:
\(String(describing: lightingMode))")

 // Make the suggested change. mapView.lightingMode = lightingMode }

Objective-C

// Define a listener for suggested changes to lighting mode.
-(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode:
(GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested lighting mode has
changed: %ld", (long)lightingMode);

 // Make the suggested change. _mapView.lightingMode = lightingMode; }