नेविगेशन इवेंट के लिए सुनें

इस गाइड की मदद से, अपने ऐप्लिकेशन को अलग-अलग तरह के इवेंट के बारे में सुनने और उनका जवाब देने की अनुमति दें. ये इवेंट, उपयोगकर्ता के किसी रास्ते पर नेविगेट करने के दौरान बदलते रहते हैं. इस गाइड में, किसी रास्ते को तय करने के बारे में नहीं बताया गया है. इसमें सिर्फ़ किसी रास्ते पर होने वाले इवेंट के जवाब देने के बारे में बताया गया है.

खास जानकारी

iOS के लिए Navigation SDK, आपको उपयोगकर्ता की जगह और रास्ते की स्थितियों के साथ-साथ, अहम समय और दूरी के डेटा से जुड़े लिसनर उपलब्ध कराता है. मैप के व्यू कंट्रोलर पर, आपके ऐप्लिकेशन को इन लिसनर के लिए प्रोटोकॉल अपनाने होंगे: GMSRoadSnappedLocationProviderListener और GMSNavigatorListener.

इस सूची में, नेविगेशन इवेंट के लिए उपलब्ध लिसनर के तरीके दिखाए गए हैं:

  • GMSNavigatorListener.didArriveAtWaypoint, जब कोई डेस्टिनेशन पहुंच जाता है, तब ट्रिगर होता है.
  • GMSNavigatorListener.navigatorDidChangeRoute, जब रास्ता बदलता है, तब ट्रिगर होता है.
  • GMSNavigatorListener.didUpdateRemainingTime, जब गाइडेंस चालू होता है, तब अगले डेस्टिनेशन तक पहुंचने में लगने वाले समय में बदलाव होने पर, बार-बार कॉल किया जाता है.
  • GMSNavigatorListener.didUpdateRemainingDistance, जब गाइडेंस चालू होता है, तब अगले डेस्टिनेशन तक पहुंचने में लगने वाली दूरी में बदलाव होने पर, बार-बार कॉल किया जाता है.
  • GMSNavigatorListener.didUpdateDelayCategory, जब गाइडेंस चालू होता है, तब अगले डेस्टिनेशन तक पहुंचने में लगने वाली देरी की कैटगरी में बदलाव होने पर, कॉल किया जाता है.
  • GMSNavigatorListener.didChangeSuggestedLightingMode, जब रोशनी की अनुमानित स्थितियों को अपडेट किया जाता है, तब ट्रिगर होता है. उदाहरण के लिए, जब उपयोगकर्ता की मौजूदा जगह पर रात होती है, तो रोशनी बदल जाती है.
  • GMSNavigatorListener.didUpdateSpeedingPercentage, जब ड्राइवर, स्पीड लिमिट से ज़्यादा तेज़ गाड़ी चलाता है, तब ट्रिगर होता है.
  • GMSRoadSnappedLocationProviderListener.didUpdateLocation, जब उपयोगकर्ता की जगह बदलती है, तब बार-बार कॉल किया जाता है.

कोड देखना

ज़रूरी प्रोटोकॉल के मुताबिक काम करने की जानकारी देना

नेविगेशन के तरीकों को लागू करने से पहले, व्यू कंट्रोलर को इन प्रोटोकॉल को अपनाना होगा:

Swift

class ViewController:
  UIViewController,
  GMSNavigatorListener,
  GMSRoadSnappedLocationProviderListener
{
}

Objective-C

@interface ViewController () <GMSNavigatorListener, GMSRoadSnappedLocationProviderListener>
@end

नेविगेशन प्रोटोकॉल अपनाने के बाद, लिसनर को व्यू कंट्रोलर पर सेट करें. उदाहरण के लिए, viewDidLoad() तरीके में यह कोड जोड़ा जा सकता है.

Swift

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

Objective-C

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

जगह की जानकारी के अपडेट पाना या रोकना

मैप पर उपयोगकर्ता की प्रोग्रेस दिखाने के लिए, जगह की जानकारी के अपडेट ज़रूरी हैं.

location इंस्टेंस, ये प्रॉपर्टी दिखाता है:

जगह की जानकारी की प्रॉपर्टी ब्यौरा
altitude मौजूदा ऊंचाई.
coordinate.latitude मौजूदा रोड-स्नैप्ड अक्षांश निर्देशांक.
coordinate.longitude मौजूदा रोड-स्नैप्ड देशांतर निर्देशांक.
course डिग्री में मौजूदा बियरिंग.
speed मौजूदा स्पीड.
timestamp मौजूदा रीडिंग की तारीख/समय.

जगह की जानकारी के अपडेट लगातार पाने के लिए, mapView.roadSnappedLocationProvider.startUpdatingLocation को कॉल करें. साथ ही, didUpdateLocation इवेंट को हैंडल करने के लिए, GMSRoadSnappedLocationProviderListener का इस्तेमाल करें.

यहां दिए गए उदाहरण में, startUpdatingLocation को कॉल करने का तरीका बताया गया है:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatingLocation];

यहां दिए गए कोड से, GMSRoadSnappedLocationProviderListener बनता है. यह 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);
}

जब ऐप्लिकेशन बैकग्राउंड में हो, तब जगह की जानकारी के अपडेट पाने के लिए, allowsBackgroundLocationUpdates को 'सही' पर सेट करें:

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

डेस्टिनेशन पर पहुंचने वाले इवेंट का पता लगाना

जब कोई डेस्टिनेशन पहुंच जाता है, तब इसका पता लगाने के लिए, आपका ऐप्लिकेशन didArriveAtWaypoint इवेंट का इस्तेमाल करता है. continueToNextDestinationWithCompletion() को कॉल करके, गाइडेंस फिर से शुरू किया जा सकता है और अगले वेपॉइंट पर पहुंचा जा सकता है. इसके बाद, गाइडेंस को फिर से चालू किया जा सकता है. आपका ऐप्लिकेशन, continueToNextDestinationWithCompletion() को कॉल करने के बाद ही गाइडेंस को फिर से चालू कर सकता है.

ऐप्लिकेशन के continueToNextDestinationWithCompletion को कॉल करने के बाद, नेविगेटर के पास पिछले डेस्टिनेशन के बारे में कोई डेटा नहीं होता. अगर आपको किसी रूट लेग के बारे में जानकारी का विश्लेषण करना है, तो continueToNextDestinationWithCompletion() को कॉल करने से पहले, आपको यह जानकारी नेविगेटर से वापस लेनी होगी.

यहां दिए गए कोड के उदाहरण में, didArriveAtWaypoint इवेंट को हैंडल करने का तरीका दिखाया गया है:

Swift

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

Objective-C

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

रास्ते में बदलाव के अपडेट पाना

जब भी रास्ता बदलता है, तब सूचना पाने के लिए, navigatorDidChangeRoute इवेंट को हैंडल करने का एक तरीका बनाएं. GMSNavigator की routeLegs और currentRouteLeg प्रॉपर्टी का इस्तेमाल करके, नए रास्ते को ऐक्सेस किया जा सकता है.

Swift

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

Objective-C

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

डेस्टिनेशन तक पहुंचने में लगने वाले समय के अपडेट पाना

डेस्टिनेशन तक पहुंचने में लगने वाले समय के अपडेट लगातार पाने के लिए, didUpdateRemainingTime इवेंट को हैंडल करने का एक तरीका बनाएं. time पैरामीटर, अगले डेस्टिनेशन तक पहुंचने में लगने वाले अनुमानित समय की जानकारी सेकंड में देता है.

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

अगले डेस्टिनेशन तक पहुंचने में लगने वाले अनुमानित समय में कम से कम बदलाव सेट करने के लिए, GMSNavigator पर timeUpdateThreshold प्रॉपर्टी सेट करें. इसकी वैल्यू सेकंड में तय की जाती है. अगर यह प्रॉपर्टी सेट नहीं है, तो सेवाएं एक सेकंड की डिफ़ॉल्ट वैल्यू का इस्तेमाल करती हैं.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

डेस्टिनेशन तक पहुंचने में लगने वाली दूरी के अपडेट पाना

डेस्टिनेशन तक पहुंचने में लगने वाली दूरी के अपडेट लगातार पाने के लिए, didUpdateRemainingDistance इवेंट को हैंडल करने का एक तरीका बनाएं. distance पैरामीटर, अगले डेस्टिनेशन तक पहुंचने में लगने वाली अनुमानित दूरी की जानकारी मीटर में देता है.

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

अगले डेस्टिनेशन तक पहुंचने में लगने वाली अनुमानित दूरी में कम से कम बदलाव सेट करने के लिए, GMSNavigator पर distanceUpdateThreshold प्रॉपर्टी सेट करें. इसकी वैल्यू मीटर में तय की जाती है. अगर यह प्रॉपर्टी सेट नहीं है, तो सेवाएं एक मीटर की डिफ़ॉल्ट वैल्यू का इस्तेमाल करती हैं.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

ट्रैफ़िक के अपडेट पाना

बाकी बचे रास्ते के लिए, ट्रैफ़िक फ़्लो के अपडेट लगातार पाने के लिए, didUpdateDelayCategory इवेंट को हैंडल करने का एक तरीका बनाएं. delayCategoryToNextDestination को कॉल करने पर, GMSNavigationDelayCategory मिलता है. इससे 0 से 3 तक की वैल्यू मिलती है. कैटगरी के अपडेट, ऐप्लिकेशन के उपयोगकर्ता की मौजूदा जगह के आधार पर तय होते हैं. अगर ट्रैफ़िक का डेटा उपलब्ध नहीं है, तो GMSNavigationDelayCategory, 0 दिखाता है. नंबर 1 से 3, हल्के से भारी तक बढ़ते हुए फ़्लो को दिखाते हैं.

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 प्रॉपर्टी, देरी के ये लेवल दिखाती है:

देरी की कैटगरी ब्यौरा
GMSNavigationDelayCategoryNoData 0 - उपलब्ध नहीं है. ट्रैफ़िक या :
रास्ते के लिए कोई डेटा नहीं है.
GMSNavigationDelayCategoryHeavy 1 - बहुत ज़्यादा.
GMSNavigationDelayCategoryMedium 2 - मीडियम.
GMSNavigationDelayCategoryLight 3 - कम.

स्पीडिंग के अपडेट पाना

जब कोई ड्राइवर, स्पीड लिमिट से ज़्यादा तेज़ गाड़ी चलाता है, तब अपडेट पाने के लिए, didUpdateSpeedingPercentage इवेंट को हैंडल करने का एक तरीका बनाएं.

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

रोशनी के सुझाए गए मोड में बदलाव करना

रोशनी में अनुमानित बदलावों के अपडेट पाने के लिए, didChangeSuggestedLightingMode इवेंट को हैंडल करने का एक तरीका बनाएं.

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