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

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

खास जानकारी

iOS के लिए नेविगेशन 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 इंस्टेंस में ये प्रॉपर्टी दिखती हैं:

लोकेशन प्रॉपर्टी ब्यौरा
ऊंचाई मौजूदा ऊंचाई.
coordinate.latitude सड़क का मौजूदा अक्षांश निर्देशांक.
coordinate.longitude सड़क से शेयर किया गया मौजूदा देशांतर निर्देशांक.
कोर्स मौजूदा बियरिंग: डिग्री में.
गति मौजूदा स्पीड.
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 इवेंट का इस्तेमाल करके यह पता लगाता है कि डेस्टिनेशन में कब है पहुंच गए हैं. दिशा-निर्देश फिर से शुरू करें और इस तारीख तक अगले वेपॉइंट पर जाएं continueToNextDestination() को कॉल करें. इसके बाद, दिशा-निर्देश को फिर से चालू करें. आपका ऐप्लिकेशन continueToNextDestination() को कॉल करने के बाद, दिशा-निर्देश को फिर से चालू करना होगा.

ऐप्लिकेशन के continueToNextDestination को कॉल करने के बाद, नेविगेटर के पास पिछले डेस्टिनेशन का डेटा. अगर आपको किसी रूट लेग, कॉल करने से पहले आपको इसे नेविगेटर से पुनर्प्राप्त करना होगा continueToNextDestination().

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

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

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

रास्ता बदलने पर सूचना पाने के लिए, एक तरीका बनाएं 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; }