Navigasyon etkinliklerini dinleme

Uygulamanızın, kullanıcı bir rota üzerinde ilerlerken değişen çeşitli etkinlikleri dinlemesini ve bunlara yanıt vermesini sağlamak için bu kılavuzdan yararlanın. Bu kılavuzda rota tanımlama değil, yalnızca bir rota üzerindeki etkinliklere yanıt verme konusu ele alınmaktadır.

Genel Bakış

iOS için Navigation SDK, kullanıcının konumu ve rota üzerindeki koşullarla ilişkili dinleyiciler ile önemli zaman ve mesafe verileri sağlar. Uygulamanızın, haritanın görünüm denetleyicisinde aşağıdaki dinleyiciler için protokolleri benimsemesi gerekir: GMSRoadSnappedLocationProviderListener ve GMSNavigatorListener.

Bu listede, gezinme etkinlikleri için kullanılabilen işleyici yöntemleri gösterilmektedir:

Kodu görüntüleme

Gerekli protokollere uygunluk beyanında bulunma

Gezinme yöntemlerini uygulamadan önce görünüm denetleyicisinin aşağıdaki protokolleri benimsemesi gerekir:

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

Navigasyon protokollerini uyguladıktan sonra dinleyicileri görünüm denetleyicisine ayarlayın. Örneğin, aşağıdaki kodu viewDidLoad() yöntemine ekleyebilirsiniz.

Swift

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

Objective-C

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

Konum güncellemelerini alma veya durdurma

Kullanıcının haritadaki ilerleme durumunu göstermek için konum güncellemeleri gerekir.

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

Konum özelliği Açıklama
yükseklik Mevcut yükseklik.
coordinate.latitude Yola sabitlenmiş mevcut enlem koordinatı.
coordinate.longitude Yola sabitlenmiş mevcut boylam koordinatı.
kurs Mevcut yön derece cinsinden.
hız Şu anki hız.
timestamp Mevcut okumanın tarihi/saati.

Sürekli konum güncellemeleri almak için mapView.roadSnappedLocationProvider.startUpdatingLocation işlevini çağırın ve didUpdateLocation etkinliğini işlemek için GMSRoadSnappedLocationProviderListener işlevini kullanın.

Aşağıdaki örnekte startUpdatingLocation çağrısı gösterilmektedir:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatingLocation];

Aşağıdaki kod, didUpdateLocation etkinliğini işleyen bir GMSRoadSnappedLocationProviderListener oluşturur.

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 allowsBackgroundLocationUpdates değerini true olarak ayarlayın:

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

Varış etkinliklerini algılama

Uygulamanız, bir hedefe ulaşıldığını tespit etmek için didArriveAtWaypoint etkinliğini kullanıyor. continueToNextDestination() tuşuna basıp rehberliği yeniden etkinleştirerek rehberliğe devam edebilir ve bir sonraki yol noktasına geçebilirsiniz. Uygulamanız, continueToNextDestination() çağrıldıktan sonra rehberliği yeniden etkinleştirmelidir.

Uygulama continueToNextDestination işlevini çağırdıktan sonra gezinme aracı, önceki hedefle ilgili verilere artık sahip olmaz. Bir rota ayağıyla ilgili bilgileri analiz etmek istiyorsanız continueToNextDestination() işlevini çağırmadan önce bu bilgileri navigatörden almanız gerekir.

Aşağıdaki kod örneğinde, didArriveAtWaypoint etkinliğini işleme yöntemi gösterilmektedir:

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üncellemelerini alma

Rota her değiştirildiğinde bildirim almak için navigatorDidChangeRoute etkinliğini işleyecek bir yöntem oluşturun. GMSNavigator öğesinin routeLegs ve currentRouteLeg özelliklerini kullanarak yeni rotaya erişebilirsiniz.

Swift

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

Objective-C

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

Hedefe varış zamanı güncellemelerini alma

Hedefe varış zamanıyla ilgili sürekli güncellemeler almak için didUpdateRemainingTime etkinliğini işleyecek bir yöntem oluşturun. time parametresi, bir sonraki hedefe ulaşılana kadar geçen tahmini süreyi saniye cinsinden sağlar.

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

Tahmini süredeki bir sonraki hedefe ulaşma süresindeki minimum değişikliği ayarlamak için GMSNavigator üzerinde timeUpdateThreshold özelliğini ayarlayın. Değer saniye cinsinden belirtilir. Bu özellik ayarlanmamışsa hizmetler bir saniyelik varsayılan değeri kullanır.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Hedefe olan mesafeyle ilgili güncellemeleri alma

Hedefe olan mesafeyle ilgili sürekli güncellemeler almak için didUpdateRemainingDistance etkinliğini işleyecek bir yöntem oluşturun. distance parametresi, bir sonraki hedefe olan tahmini mesafeyi metre cinsinden sağlar.

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

Tahmini mesafede bir sonraki hedefe doğru minimum değişikliği ayarlamak için distanceUpdateThreshold özelliğini GMSNavigator üzerinde ayarlayın (değer metre cinsinden belirtilir). Bu özellik ayarlanmamışsa hizmetler varsayılan olarak bir metre değerini kullanır.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Trafik güncellemelerini alma

Rotanın geri kalan kısmındaki trafik akışıyla ilgili sürekli güncellemeler almak için didUpdateDelayCategory etkinliğini işleyecek bir yöntem oluşturun. delayCategoryToNextDestination işlevine yapılan bir çağrı, 0 ile 3 arasında bir değer sağlayan GMSNavigationDelayCategory değerini döndürür. Kategorideki güncellemeler, uygulama kullanıcısının mevcut konumuna göre yapılır. Trafik verileri kullanılamıyorsa GMSNavigationDelayCategory 0 değerini döndürür. 1-3 arasındaki sayılar, akışın hafiften şiddetliye doğru arttığını gösterir.

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 veya :
rotayı seçin.
GMSNavigationDelayCategoryHeavy 1 - Kalın.
GMSNavigationDelayCategoryMedium 2 - Orta.
GMSNavigationDelayCategoryLight 3 - Işık.

Hız güncellemelerini alma

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

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 aydınlatma modunu değiştirme

Işıklandırmadaki tahmini değişikliklerle ilgili güncellemeler almak için didChangeSuggestedLightingMode etkinliğini işleyecek bir yöntem oluşturun.

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