Uygulamanızın, kullanıcı bir rotada gezinirken değişen çeşitli etkinlikleri dinlemesini ve bunlara yanıt vermesini sağlamak için bu kılavuzu kullanın. Bu kılavuzda rota tanımlama ele alınmaz, yalnızca rota üzerindeki etkinliklere yanıt verilir.
Genel bakış
iOS için Navigasyon SDK'sı, kullanıcının konumuyla ilişkilendirilmiş dinleyiciler ve rota üzerindeki koşulların yanı sıra önemli zaman ve mesafe verilerini sunar. Haritanın görüntüleme denetleyicisinde uygulamanızın şu dinleyiciler için protokolleri benimsemesi gerekir: GMSRoadSnappedLocationProviderListener
ve GMSNavigatorListener
.
Bu liste, gezinme etkinlikleri için kullanılabilecek işleyici yöntemlerini gösterir:
GMSNavigatorListener.didArriveAtWaypoint
, bir hedefe ulaşıldığında tetiklenir.- Rota değiştiğinde,
GMSNavigatorListener.navigatorDidChangeRoute
tetiklenir. GMSNavigatorListener.didUpdateRemainingTime
, bir sonraki hedefe giden zaman değiştikçe, rehberlik etkin durumdayken tekrar çağrılır.GMSNavigatorListener.didUpdateRemainingDistance
, rehber etkinken bir sonraki hedefe olan mesafe değiştiğinde tekrar tekrar çağrılır.GMSNavigatorListener.didUpdateDelayCategory
, rehberlik etkinken gecikme kategorisi bir sonraki hedefe değiştiğinde çağrılır.- Tahmini ışıklandırma koşulları güncellendiğinde
GMSNavigatorListener.didChangeSuggestedLightingMode
tetiklenir. Örneğin, gece kullanıcının mevcut konumuna denk geldiğinde ışıklandırma değişir. - Sürücü hız sınırını aştığında tetiklenir:
GMSNavigatorListener.didUpdateSpeedingPercentage
. GMSRoadSnappedLocationProviderListener.didUpdateLocation
, kullanıcının konumu değiştiğinde tekrar tekrar çağrılır.
Kodu göster
Gerekli protokollere uygunluk bildiriliyor
Gezinme yöntemlerini uygulamadan önce görünüm denetleyicinin protokolleri benimsemesi gerekir:
Swift
class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {
Objective-C
@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>
@end
Gezinme protokollerini uyguladıktan sonra, işleyicileri görüntüleme 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ü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 mapView.roadSnappedLocationProvider.startUpdatingLocation
numaralı telefonu arayın ve didUpdateLocation
etkinliğini işlemek için GMSRoadSnappedLocationProviderListener
kodunu kullanı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, 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
öğesini doğru değerine ayarlayın:
Swift
mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true
Objective-C
_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;
Varış etkinliklerini algılama
Uygulamanız bir hedefe ulaşıldığında bunu algılamak için didArriveAtWaypoint
etkinliğini kullanır. continueToNextDestination()
numaralı telefonu arayıp kılavuzu yeniden etkinleştirerek kılavuzu devam ettirebilir ve bir sonraki ara noktaya geçebilirsiniz. continueToNextDestination()
çağrıldıktan sonra uygulamanızın kılavuzu yeniden etkinleştirmesi gerekir.
Uygulama continueToNextDestination
çağırdıktan sonra, gezgin artık önceki hedefle ilgili verilere sahip olmaz. Bir rota ayağıyla ilgili bilgileri analiz etmek istiyorsanız continueToNextDestination()
çağrısından önce bunu navigasyondan almanız gerekir.
Aşağıdaki kod örneğinde, didArriveAtWaypoint
etkinliğini işlemek için bir yöntem 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 alınıyor
Rota değiştirildiğinde bildirim almak için navigatorDidChangeRoute
etkinliğini işleyecek bir yöntem oluşturun. GMSNavigator
ürününün 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."); }
Hedef güncellemelerinin alınacağı süre
Hedef güncellemelerine kadar sürekli olarak süre almak istiyorsanız 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); }
Bir sonraki hedefe giden tahmini süredeki minimum değişimi ayarlamak için GMSNavigator
alanında timeUpdateThreshold
özelliğini 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 mesafe güncellemeleri alınıyor
Hedef güncellemelerine sürekli olarak uzaklık bilgisi almak için didUpdateRemainingDistance
etkinliğini işleyecek bir yöntem oluşturun. distance
parametresi, bir sonraki hedefe ulaşılabilecek 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]); }
Bir sonraki hedefe olan tahmini mesafedeki minimum değişikliği belirlemek için GMSNavigator
tarihinde distanceUpdateThreshold
özelliğini 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 alınıyor
Kalan rota için trafik akışıyla ilgili sürekli güncellemeleri almak amacıyla didUpdateDelayCategory
etkinliğini işlemek üzere bir yöntem oluşturun. delayCategoryToNextDestination
çağrısı, 0 ile 3 arasında bir değer sağlayan GMSNavigationDelayCategory
değerini döndürür. Kategoride yapılan güncellemeler, uygulama
kullanıcının mevcut konumuna dayanır. Trafik verileri mevcut değilse GMSNavigationDelayCategory
, 0 değerini döndürür. 1'den 3'e kadar olan sayılar,
hafiften yoğuna 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
ö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 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 ışık modu değiştiriliyor
Işıklandırmadaki tahmini değişikliklerle ilgili güncellemeleri 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; }