Uygulamanızın, kullanıcı bir rota üzerinde gezinirken değişen çeşitli etkinlikleri dinleyip yanıtlamasını sağlamak için bu rehberi kullanın. Bu kılavuzda, rota tanımlama değil, yalnızca rota üzerindeki etkinliklere yanıt verme ele alınmaktadır.
Genel Bakış
iOS için Navigasyon SDK'sı, kullanıcının konumu ve rotadaki koşullarla ilişkili dinleyiciler, önemli zaman ve mesafe verileri sağlar. Uygulamanızın, haritanın görüntüleme denetleyicisinde şu dinleyicilerin protokollerini benimsemesi gerekir: GMSRoadSnappedLocationProviderListener
ve GMSNavigatorListener
.
Bu listede, gezinme etkinlikleri için kullanılabilen dinleyici yöntemleri gösterilmektedir:
GMSNavigatorListener.didArriveAtWaypoint
, bir hedefe ulaşıldığında tetiklenir.GMSNavigatorListener.navigatorDidChangeRoute
, rota değiştiğinde tetiklenir.GMSNavigatorListener.didUpdateRemainingTime
, rehberlik etkinken bir sonraki hedefe ulaşma süresi değiştikçe tekrar tekrar çağrılır.GMSNavigatorListener.didUpdateRemainingDistance
, rehberlik etkinken bir sonraki hedefe olan mesafe değiştikçe tekrar tekrar çağrılır.GMSNavigatorListener.didUpdateDelayCategory
, rehberlik etkinken sonraki hedefe olan gecikme kategorisi değiştiğinde çağrılır.GMSNavigatorListener.didChangeSuggestedLightingMode
, tahmini aydınlatma koşulları güncellendiğinde tetiklenir. Örneğin, kullanıcının mevcut konumunda gece olduğunda ışıklandırma değişir.GMSNavigatorListener.didUpdateSpeedingPercentage
, sürücü hız sınırını aştığında tetiklenir.- Kullanıcının konumu değiştikçe tekrar tekrar çağrılan
GMSRoadSnappedLocationProviderListener.didUpdateLocation
.
Kodu görme
Gerekli protokollere uygunluğu beyan etme
Görüntüleme denetleyicisi, gezinme yöntemlerini uygulamadan önce aşağıdaki protokolleri benimsemelidir:
Swift
class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {
Objective-C
@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>
@end
Gezinme protokollerini benimsedikten sonra dinleyicileri görüntü kontrol cihazına ayarlayın. Örneğin, viewDidLoad()
yöntemine aşağıdaki kodu 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 haritada ilerleme durumunu göstermek için konum güncellemeleri gerekir.
location
örneği aşağıdaki özellikleri gösterir:
Konum mülkü | Açıklama |
---|---|
rakım | Mevcut rakım. |
coordinate.latitude | Yola göre yakalanan mevcut enlem koordinatı. |
coordinate.longitude | Yolun şu anki boylam koordinatı. |
kurs | Derece cinsinden mevcut yön. |
hız | Mevcut 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 ne zaman ulaşıldığını algılamak için didArriveAtWaypoint
etkinliğini kullanır. continueToNextDestination()
'yi çağırıp rehberliği yeniden etkinleştirerek rehberliği devam ettirebilir ve sonraki yol noktasına geçebilirsiniz. Uygulamanız, continueToNextDestination()
çağrısını sonrasında rehberliği yeniden etkinleştirmelidir.
Uygulama continueToNextDestination
'ü aradıktan sonra, navigasyon cihazında önceki hedefle ilgili veriler artık bulunmaz. Bir rota adımı hakkındaki bilgileri analiz etmek istiyorsanız continueToNextDestination()
'ü aramadan önce bu bilgileri navigasyon cihazından 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üncellemeleri alma
Rota her değiştirildiğinde bildirim almak için navigatorDidChangeRoute
etkinliğini işleyen bir yöntem oluşturun. GMSNavigator
öğesinin routeLegs
ve currentRouteLeg
özelliklerini kullanarak yeni yola 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ış süresi güncellemeleri alma
Hedefe varış süresiyle ilgili sürekli güncellemeler almak için didUpdateRemainingTime
etkinliğini işleyen 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); }
Bir sonraki hedefe tahmini süredeki minimum değişikliği ayarlamak için timeUpdateThreshold
mülkünü GMSNavigator
olarak ayarlayın. Değer saniye cinsinden belirtilir. Bu özellik ayarlanmazsa hizmetler bir saniyelik varsayılan değeri kullanır.
Swift
navigator?.timeUpdateThreshold = 10
Objective-C
navigator.timeUpdateThreshold = 10;
Hedefe olan mesafeyle ilgili güncellemeler alma
Hedefe olan mesafeyle ilgili sürekli güncellemeler almak için didUpdateRemainingDistance
etkinliğini işleyen 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]); }
Sonraki hedefe olan tahmini mesafedeki minimum değişikliği ayarlamak için distanceUpdateThreshold
mülkünü GMSNavigator
olarak ayarlayın (değer metre cinsinden belirtilir). Bu özellik ayarlanmazsa hizmetler bir metrelik varsayılan değeri kullanır.
Swift
navigator?.distanceUpdateThreshold = 100
Objective-C
navigator.distanceUpdateThreshold = 100;
Trafik güncellemeleri alma
Kalan rotanın trafik akışıyla ilgili sürekli güncellemeler almak için didUpdateDelayCategory
etkinliğini işleyen bir yöntem oluşturun. delayCategoryToNextDestination
işlevine yapılan bir çağrı, 0 ila 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, hafiften ağıra doğru artan akışı 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
mülkü aşağıdaki gecikme düzeylerini gösterir:
Gecikme kategorisi | Açıklama |
---|---|
GMSNavigationDelayCategoryNoData | 0: Kullanılamıyor, trafik için veri yok veya : |
rota. | |
GMSNavigationDelayCategoryHeavy | 1 - Ağır. |
GMSNavigationDelayCategoryMedium | 2 - Orta. |
GMSNavigationDelayCategoryLight | 3 - Işık. |
Hız sınırı ihlali güncellemeleri alma
Bir sürücü hız sınırını aştığında güncelleme almak için didUpdateSpeedingPercentage
etkinliğini işleyen 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
Aydınlatmadaki tahmini değişikliklerle ilgili güncellemeler almak için didChangeSuggestedLightingMode
etkinliğini işleyen 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; }