इस गाइड का इस्तेमाल करके, अपने ऐप्लिकेशन को अलग-अलग तरह के इवेंट सुनने और उनका जवाब देने की सुविधा चालू करें. ये इवेंट, उपयोगकर्ता के रास्ते पर आगे बढ़ने के साथ-साथ बदलते रहते हैं. इस गाइड में, रास्ते को तय करने के बारे में नहीं बताया गया है. इसमें सिर्फ़ रास्ते में होने वाले इवेंट के बारे में बताया गया है.
खास जानकारी
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 इंस्टेंस में ये प्रॉपर्टी दिखती हैं:
| लोकेशन प्रॉपर्टी | ब्यौरा |
|---|---|
| ऊंचाई | मौजूदा ऊंचाई. |
| 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 इवेंट का इस्तेमाल करके यह पता लगाता है कि मंज़िल तक पहुंचा गया है या नहीं. 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);
}
सुझाए गए लाइटिंग मोड को बदलना
GMSNavigator, दिन के समय और डिवाइस की जगह की जानकारी के आधार पर, सुझाए गए लाइटिंग मोड का हिसाब लगाता है. साथ ही, didChangeSuggestedLightingMode लिसनर मेथड को सिर्फ़ तब कॉल करता है, जब सुझाया गया मोड बदलता है (जैसे, सूर्योदय या सूर्यास्त के समय). जब उपयोगकर्ता आपका ऐप्लिकेशन लॉन्च करे, तब मैप सही लाइटिंग मोड के साथ शुरू हो, यह पक्का करने के लिए, शुरू करने के दौरान नेविगेटर के suggestedLightingMode को mapView.lightingMode पर सेट करें. साथ ही, बाद में होने वाले बदलावों को मैनेज करने के लिए, didChangeSuggestedLightingMode को लागू करें.
नीचे दिए गए उदाहरण में, शुरुआती लाइटिंग मोड सेट करने और सुझाए गए लाइटिंग मोड में बदलावों को सुनने का तरीका बताया गया है:
Swift
// Set the initial lighting mode on launch or setup.
mapView.lightingMode = mapView.navigator?.suggestedLightingMode ?? .normal
// 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
// Set the initial lighting mode on launch or setup.
_mapView.lightingMode = _mapView.navigator.suggestedLightingMode;
// 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;
}
रोशनी के मोड को अपने-आप और मैन्युअल तरीके से कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, सामान्य और कम रोशनी वाले मोड कॉन्फ़िगर करना लेख पढ़ें.