फ़िलहाल, नेविगेशन SDK टूल सिर्फ़ चुनिंदा ग्राहकों के लिए उपलब्ध है. ज़्यादा जानने के लिए, सेल्स टीम से संपर्क करें.
मैप की नई स्टाइल, जल्द ही Google Maps Platform पर उपलब्ध होगी. मैप की स्टाइल में हुए इस अपडेट में, नया डिफ़ॉल्ट कलर पटल जोड़ा गया है. साथ ही, मैप के अनुभवों और उसे इस्तेमाल करने के तरीके में सुधार भी किए गए हैं. मार्च 2025 में, सभी मैप स्टाइल अपने-आप अपडेट हो जाएंगी. उपलब्धता और जल्दी ऑप्ट इन करने के तरीके के बारे में ज़्यादा जानकारी के लिए, Google Maps Platform के लिए नई मैप स्टाइल देखें.
इस गाइड का इस्तेमाल करके, अपने ऐप्लिकेशन को अलग-अलग इवेंट सुनने और उनका जवाब देने की सुविधा दें. ये इवेंट, किसी रास्ते पर नेविगेट करने के दौरान बदलते रहते हैं. इस गाइड में, रास्ते को तय करने के बारे में नहीं बताया गया है. इसमें सिर्फ़ रास्ते पर होने वाले इवेंट के जवाब देने के बारे में बताया गया है.
खास जानकारी
iOS के लिए नेविगेशन SDK टूल, आपको उपयोगकर्ता की जगह की जानकारी और रास्ते की स्थितियों के साथ-साथ, समय और दूरी से जुड़ा अहम डेटा देता है. मैप के व्यू कंट्रोलर पर, आपके ऐप्लिकेशन को इन लिसनर के लिए प्रोटोकॉल अपनाने होंगे:
GMSRoadSnappedLocationProviderListener और
GMSNavigatorListener.
इस सूची में, नेविगेशन इवेंट के लिए उपलब्ध लिसनर के तरीके दिखाए गए हैं:
/**Copyright2020GoogleInc.Allrightsreserved.**LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethisfileexceptincompliancewiththeLicense.*YoumayobtainacopyoftheLicenseat**http://www.apache.org/licenses/LICENSE-2.0**Unlessrequiredbyapplicablelaworagreedtoinwriting,software*distributedundertheLicenseisdistributedonan"AS IS"BASIS,*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.*SeetheLicenseforthespecificlanguagegoverningpermissionsand*limitationsundertheLicense.*/importGoogleNavigationimportUIKitclassViewController:UIViewController,GMSNavigatorListener,GMSRoadSnappedLocationProviderListener{varmapView:GMSMapView!varlocationManager:CLLocationManager!overridefuncloadView(){locationManager=CLLocationManager()letcamera=GMSCameraPosition.camera(withLatitude:47.67,longitude:-122.20,zoom:14)mapView=GMSMapView.map(withFrame:CGRect.zero,camera:camera)//AddlistenersforGMSNavigatorandGMSRoadSnappedLocationProvider.mapView.navigator?.add(self)mapView.roadSnappedLocationProvider?.add(self)//Setthetimeupdatethreshold(seconds)anddistanceupdatethreshold(meters).mapView.navigator?.timeUpdateThreshold=10mapView.navigator?.distanceUpdateThreshold=100//Showthetermsandconditions.letcompanyName="Ride Sharing Co."GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(withCompanyName:companyName){termsAcceptediniftermsAccepted{//Enablenavigationiftheuseracceptstheterms.self.mapView.isNavigationEnabled=true//Requestauthorizationtouselocationservices.self.locationManager.requestAlwaysAuthorization()//Requestauthorizationforalertnotificationswhichdeliverguidanceinstructions//inthebackground.UNUserNotificationCenter.current().requestAuthorization(options:[.alert]){granted,errorin//Handledeniedauthorizationtodisplaynotifications.if!granted||error!=nil{print("Authorization to deliver notifications was rejected.")}}}else{//Handlethecasewhentheuserrejectsthetermsandconditions.}}view=mapViewmakeButton()}//Createarouteandstartguidance.@objcfuncstartNav(){vardestinations=[GMSNavigationWaypoint]()destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJnUYTpNASkFQR_gSty5kyoUk",title:"PCC Natural Market")!)destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJJ326ROcSkFQRBfUzOL2DSbo",title:"Marina Park")!)mapView.navigator?.setDestinations(destinations){routeStatusinguardrouteStatus==.OKelse{print("Handle route statuses that are not OK.")return}self.mapView.navigator?.isGuidanceActive=trueself.mapView.cameraMode=.followingself.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()}mapView.roadSnappedLocationProvider?.startUpdatingLocation()}//Listenertohandlecontinuouslocationupdates.funclocationProvider(_locationProvider:GMSRoadSnappedLocationProvider,didUpdatelocation:CLLocation){print("Location: \(location.description)")}//Listenertohandlespeedingevents.funcnavigator(_navigator:GMSNavigator,didUpdateSpeedingPercentagepercentageAboveLimit:CGFloat){print("Speed is \(percentageAboveLimit) above the limit.")}//Listenertohandlearrivalevents.funcnavigator(_navigator:GMSNavigator,didArriveAtwaypoint:GMSNavigationWaypoint){print("You have arrived at: \(waypoint.title)")mapView.navigator?.continueToNextDestination()mapView.navigator?.isGuidanceActive=true}//Listenerforroutechangeevents.funcnavigatorDidChangeRoute(_navigator:GMSNavigator){print("The route has changed.")}//Listenerfortimetonextdestination.funcnavigator(_navigator:GMSNavigator,didUpdateRemainingTimetime:TimeInterval){print("Time to next destination: \(time)")}//Delegatefordistancetonextdestination.funcnavigator(_navigator:GMSNavigator,didUpdateRemainingDistancedistance:CLLocationDistance){letmiles=distance*0.00062137print("Distance to next destination: \(miles) miles.")}//Delegatefortrafficupdatestonextdestinationfuncnavigator(_navigator:GMSNavigator,didUpdatedelayCategory:GMSNavigationDelayCategory){print("Delay category to next destination: \(String(describing: delayCategory)).")}//Delegateforsuggestedlightingmodechanges.funcnavigator(_navigator:GMSNavigator,didChangeSuggestedLightingModelightingMode:GMSNavigationLightingMode){print("Suggested lighting mode has changed: \(String(describing: lightingMode))")//Changetothesuggestedlightingmode.mapView.lightingMode=lightingMode}//Addabuttontotheview.funcmakeButton(){//Startnavigation.letnavButton=UIButton(frame:CGRect(x:5,y:150,width:200,height:35))navButton.backgroundColor=.bluenavButton.alpha=0.5navButton.setTitle("Start navigation",for:.normal)navButton.addTarget(self,action:#selector(startNav), for: .touchUpInside)self.mapView.addSubview(navButton)}}
किसी इवेंट लिसनर के लिए Objective-C कोड दिखाएं/छिपाएं.
/* * Copyright 2020 Google Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#import "ViewController.h"@importGoogleNavigation;@interfaceViewController()<GMSNavigatorListener,GMSRoadSnappedLocationProviderListener>
@end@implementationViewController{GMSMapView*_mapView;CLLocationManager*_locationManager;}-(void)loadView{_locationManager=[[CLLocationManageralloc]init];GMSCameraPosition*camera=[GMSCameraPositioncameraWithLatitude:47.67longitude:-122.20zoom:14];_mapView=[GMSMapViewmapWithFrame:CGRectZerocamera:camera];// Add listeners for GMSNavigator and GMSRoadSnappedLocationProvider.[_mapView.navigatoraddListener:self];[_mapView.roadSnappedLocationProvideraddListener:self];// Set the time update threshold (seconds) and distance update threshold (meters)._mapView.navigator.timeUpdateThreshold=10;_mapView.navigator.distanceUpdateThreshold=100;// Show the terms and conditions.NSString*companyName=@"Ride Sharing Co.";[GMSNavigationServicesshowTermsAndConditionsDialogIfNeededWithCompanyName:companyNamecallback:^(BOOLtermsAccepted){if(termsAccepted){// Enable navigation if the user accepts the terms._mapView.navigationEnabled=YES;// Request authorization to use location services.[_locationManagerrequestAlwaysAuthorization];}else{// Handle the case when the user rejects the terms and conditions.}}];self.view=_mapView;[selfmakeButton];}// Create a route and initiate navigation.-(void)startNav{NSArray<GMSNavigationWaypoint*>*destinations=@[[[GMSNavigationWaypointalloc]initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"title:@"PCC Natural Market"],[[GMSNavigationWaypointalloc]initWithPlaceID:@"ChIJJ326ROcSkFQRBfUzOL2DSbo"title:@"Marina Park"]];[_mapView.navigatorsetDestinations:destinationscallback:^(GMSRouteStatusrouteStatus){_mapView.navigator.guidanceActive=YES;_mapView.navigator.sendsBackgroundNotifications=YES;_mapView.cameraMode=GMSNavigationCameraModeFollowing;[_mapView.locationSimulatorsimulateLocationsAlongExistingRoute];}];[_mapView.roadSnappedLocationProviderstartUpdatingLocation];}#pragma mark - GMSNavigatorListener// Listener for continuous location updates.-(void)locationProvider:(GMSRoadSnappedLocationProvider*)locationProviderdidUpdateLocation:(CLLocation*)location{NSLog(@"Location: %@",location.description);}// Listener to handle speeding events.-(void)navigator:(GMSNavigator*)navigatordidUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit{NSLog(@"Speed is %f percent above the limit.",percentageAboveLimit);}// Listener to handle arrival events.-(void)navigator:(GMSNavigator*)navigatordidArriveAtWaypoint:(GMSNavigationWaypoint*)waypoint{NSLog(@"You have arrived at: %@",waypoint.title);[_mapView.navigatorcontinueToNextDestination];_mapView.navigator.guidanceActive=YES;}// Listener for route change events.-(void)navigatorDidChangeRoute:(GMSNavigator*)navigator{NSLog(@"The route has changed.");}// Listener for time to next destination.-(void)navigator:(GMSNavigator*)navigatordidUpdateRemainingTime:(NSTimeInterval)time{NSLog(@"Time to next destination: %f",time);}// Listener for distance to next destination.-(void)navigator:(GMSNavigator*)navigatordidUpdateRemainingDistance:(CLLocationDistance)distance{doublemiles=distance*0.00062137;NSLog(@"%@",[NSStringstringWithFormat:@"Distance to next destination: %.2f.",miles]);}// Listener for traffic updates for next destination-(void)navigator:(GMSNavigator*)navigatordidUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory{NSLog(@"Delay category to next destination: %ld.",delayCategory);}// Listener for suggested lighting mode changes.-(void)navigator:(GMSNavigator*)navigatordidChangeSuggestedLightingMode:(GMSNavigationLightingMode)lightingMode{NSLog(@"Suggested lighting mode has changed: %ld",(long)lightingMode);// Change to the suggested lighting mode._mapView.lightingMode=lightingMode;}#pragma mark - Programmatic UI elements// Add a button to the view.-(void)makeButton{// Start navigation.UIButton*navButton=[UIButtonbuttonWithType:UIButtonTypeCustom];[navButtonaddTarget:selfaction:@selector(startNav)forControlEvents:UIControlEventTouchUpInside];[navButtonsetTitle:@"Navigate"forState:UIControlStateNormal];[navButtonsetBackgroundColor:[UIColorblueColor]];[navButtonsetAlpha:0.5];navButton.frame=CGRectMake(5.0,150.0,100.0,35.0);[_mapViewaddSubview:navButton];}@end
ज़रूरी प्रोटोकॉल का पालन करने का एलान करना
नेविगेशन के तरीके लागू करने से पहले, व्यू कंट्रोलर को ये प्रोटोकॉल अपनाने होंगे:
मैप पर उपयोगकर्ता की प्रोग्रेस दिखाने के लिए, जगह की जानकारी अपडेट करना ज़रूरी है.
location इंस्टेंस, ये प्रॉपर्टी दिखाता है:
लोकेशन प्रॉपर्टी
ब्यौरा
ऊंचाई
मौजूदा ऊंचाई.
coordinate.latitude
सड़क के हिसाब से तय किया गया मौजूदा अक्षांश निर्देशांक.
coordinate.longitude
सड़क के हिसाब से तय किया गया मौजूदा देशांतर निर्देशांक.
कोर्स
डिग्री में मौजूदा बियरिंग.
गति
मौजूदा स्पीड.
timestamp
मौजूदा रीडिंग की तारीख/समय.
जगह की जानकारी के लगातार अपडेट पाने के लिए, mapView.roadSnappedLocationProvider.startUpdatingLocation को कॉल करें. साथ ही, didUpdateLocation इवेंट को मैनेज करने के लिए, GMSRoadSnappedLocationProviderListener का इस्तेमाल करें.
यहां दिए गए उदाहरण में, startUpdatingLocation को कॉल करने का तरीका बताया गया है:
आपका ऐप्लिकेशन, didArriveAtWaypoint इवेंट का इस्तेमाल करके यह पता लगाता है कि किसी डेस्टिनेशन पर पहुंचा गया है या नहीं. continueToNextDestination() को दबाकर, अगले वेपॉइंट पर जाने के लिए, निर्देशों को फिर से शुरू किया जा सकता है. इसके बाद, निर्देशों की सुविधा को फिर से चालू करें. आपके ऐप्लिकेशन को continueToNextDestination() को कॉल करने के बाद, निर्देशों की सुविधा फिर से चालू करनी होगी.
ऐप्लिकेशन के continueToNextDestination को कॉल करने के बाद, नेविगेटर के पास पिछले डेस्टिनेशन का डेटा नहीं होता. अगर आपको किसी रास्ते के हिस्से की जानकारी का विश्लेषण करना है, तो आपको continueToNextDestination() को कॉल करने से पहले, नेविगेटर से यह जानकारी हासिल करनी होगी.
यहां दिए गए कोड के उदाहरण में, didArriveAtWaypoint इवेंट को मैनेज करने का तरीका बताया गया है:
Swift
funcnavigator(_navigator:GMSNavigator,didArriveAtwaypoint:GMSNavigationWaypoint){print("You have arrived at: \(waypoint.title)")mapView.navigator?.continueToNextDestination()mapView.navigator?.isGuidanceActive=true}
रास्ता बदलने पर सूचना पाने के लिए, navigatorDidChangeRoute इवेंट को मैनेज करने का तरीका बनाएं. GMSNavigator की routeLegs और currentRouteLeg प्रॉपर्टी का इस्तेमाल करके, नया रूट ऐक्सेस किया जा सकता है.
डेस्टिनेशन तक पहुंचने में लगने वाले समय के अपडेट पाना
डेस्टिनेशन तक पहुंचने में लगने वाले समय के बारे में लगातार अपडेट पाने के लिए, didUpdateRemainingTime इवेंट को हैंडल करने का तरीका बनाएं. time पैरामीटर, अगले डेस्टिनेशन तक पहुंचने में लगने वाले समय का अनुमानित समय, सेकंड में बताता है.
Swift
funcnavigator(_navigator:GMSNavigator,didUpdateRemainingTimetime:TimeInterval){print("Time to next destination: \(time)")}
Objective-C
-(void)navigator:(GMSNavigator*)navigatordidUpdateRemainingTime:(NSTimeInterval)time{NSLog(@"Time to nextdestination:%f", time); }
अगले डेस्टिनेशन तक पहुंचने में लगने वाले अनुमानित समय में कम से कम बदलाव करने के लिए, timeUpdateThreshold प्रॉपर्टी को GMSNavigator पर सेट करें. इसकी वैल्यू सेकंड में दी जाती है. अगर यह प्रॉपर्टी सेट नहीं है, तो सेवाएं एक सेकंड की डिफ़ॉल्ट वैल्यू का इस्तेमाल करती हैं.
Swift
navigator?.timeUpdateThreshold=10
Objective-C
navigator.timeUpdateThreshold=10;
मंज़िल की दूरी के अपडेट पाना
डेस्टिनेशन की दूरी के बारे में लगातार अपडेट पाने के लिए, didUpdateRemainingDistance इवेंट को हैंडल करने का तरीका बनाएं. distance पैरामीटर, अगले डेस्टिनेशन तक की अनुमानित दूरी को मीटर में दिखाता है.
Swift
funcnavigator(_navigator:GMSNavigator,didUpdateRemainingDistancedistance:CLLocationDistance){letmiles=distance*0.00062137print("Distance to nextdestination: \(miles) miles.")}
अगले डेस्टिनेशन की अनुमानित दूरी में कम से कम बदलाव सेट करने के लिए, distanceUpdateThreshold प्रॉपर्टी को GMSNavigator पर सेट करें. वैल्यू, मीटर में दी जाती है. अगर यह प्रॉपर्टी सेट नहीं है, तो सेवाएं एक मीटर की डिफ़ॉल्ट वैल्यू का इस्तेमाल करती हैं.
Swift
navigator?.distanceUpdateThreshold=100
Objective-C
navigator.distanceUpdateThreshold=100;
ट्रैफ़िक से जुड़े अपडेट पाना
बाकी रास्ते के लिए ट्रैफ़िक फ़्लो के लगातार अपडेट पाने के लिए,
didUpdateDelayCategory इवेंट को हैंडल करने का तरीका बनाएं. delayCategoryToNextDestination को कॉल करने पर GMSNavigationDelayCategory दिखता है, जो 0 से 3 तक की वैल्यू दिखाता है. कैटगरी में होने वाले अपडेट, ऐप्लिकेशन के उपयोगकर्ता की मौजूदा स्थिति के आधार पर होते हैं. अगर ट्रैफ़िक डेटा उपलब्ध नहीं है, तो GMSNavigationDelayCategory 0 दिखाता है. 1 से 3 की संख्याएं, हल्के से भारी ट्रैफ़िक के बढ़ते फ़्लो को दिखाती हैं.
Swift
funcnavigator(_navigator:GMSNavigator,didUpdatedelayCategory:GMSNavigationDelayCategory){print("Traffic flow to next destination:\(delayCategory)")}
Objective-C
-(void)navigator:(GMSNavigator*)navigatordidUpdateDelayCategory:(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,didUpdateSpeedingPercentagepercentageAboveLimit:CGFloat){print("Speed is \(percentageAboveLimit) above the limit.")}
Objective-C
// Listener to handle speeding events. - (void)navigator:(GMSNavigator*)navigatordidUpdateSpeedingPercentage:(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,didChangeSuggestedLightingModelightingMode: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*)navigatordidChangeSuggestedLightingMode:(GMSNavigationLightingMode)lightingMode{NSLog(@"Suggested lighting mode haschanged:%ld", (long)lightingMode);// Make the suggested change. _mapView.lightingMode = lightingMode; }
[null,null,["आखिरी बार 2024-12-22 (UTC) को अपडेट किया गया."],[[["The Navigation SDK for iOS allows you to respond to real-time navigation events like route changes, arrival, and location updates using listeners."],["`GMSRoadSnappedLocationProviderListener` and `GMSNavigatorListener` protocols handle events like location updates, speeding, and destination arrival."],["Location updates can be managed for real-time tracking and background operation, impacting battery life."],["The `GMSNavigator` provides methods to track and respond to waypoint arrivals, route changes, time and distance to destination, traffic flow, speeding percentage, and suggested lighting mode."],["`GMSNavigatorDelegate` and `GMSRoadSnappedLocationProviderDelegate` are deprecated and replaced by `GMSRoadSnappedLocationProviderListener` and `GMSNavigatorListener`."]]],[]]