নেভিগেশন ইভেন্টের জন্য শুনুন
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
এই নির্দেশিকাটি ব্যবহার করে আপনার অ্যাপটি বিভিন্ন ধরণের ইভেন্ট শুনতে এবং প্রতিক্রিয়া জানাতে সক্ষম হবে যা ব্যবহারকারীর রুট ধরে নেভিগেট করার সাথে সাথে পরিবর্তিত হয়। এই নির্দেশিকাটি কোনও রুট সংজ্ঞায়িত করার বিষয় অন্তর্ভুক্ত করে না, কেবল একটি রুট ধরে ইভেন্টগুলিতে প্রতিক্রিয়া জানানোর বিষয় অন্তর্ভুক্ত করে।
সংক্ষিপ্ত বিবরণ
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)}}
ইভেন্ট লিসেনারের জন্য অবজেক্টিভ-সি কোডটি দেখান/লুকান।
/* * 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 উদাহরণটি নিম্নলিখিত বৈশিষ্ট্যগুলি প্রকাশ করে:
অবস্থান সম্পত্তি
বিবরণ
উচ্চতা
বর্তমান উচ্চতা।
স্থানাঙ্ক.অক্ষাংশ
বর্তমান রাস্তা-স্ন্যাপড অক্ষাংশ স্থানাঙ্ক।
স্থানাঙ্ক.দ্রাঘিমাংশ
বর্তমান রাস্তা-স্ন্যাপড দ্রাঘিমাংশ স্থানাঙ্ক।
কোর্স
ডিগ্রীতে কারেন্ট বিয়ারিং।
গতি
বর্তমান গতি।
টাইমস্ট্যাম্প
বর্তমান পঠনের তারিখ/সময়।
ক্রমাগত অবস্থানের আপডেট পেতে, mapView.roadSnappedLocationProvider.startUpdatingLocation এ কল করুন এবং didUpdateLocation ইভেন্টটি পরিচালনা করতে GMSRoadSnappedLocationProviderListener ব্যবহার করুন।
নিম্নলিখিত উদাহরণে startUpdatingLocation কল করা দেখানো হয়েছে:
আপনার অ্যাপটি didArriveAtWaypoint ইভেন্ট ব্যবহার করে কোন গন্তব্যে কখন পৌঁছানো হয়েছে তা সনাক্ত করে। আপনি continueToNextDestination() কল করে এবং তারপর নির্দেশিকা পুনরায় সক্ষম করে পরবর্তী ওয়েপয়েন্টে যেতে পারেন। continueToNextDestination() কল করার পরে আপনার অ্যাপটিকে নির্দেশিকা পুনরায় সক্ষম করতে হবে।
অ্যাপটি continueToNextDestination কল করার পর, নেভিগেটরের কাছে আর পূর্ববর্তী গন্তব্য সম্পর্কে ডেটা থাকে না। আপনি যদি কোনও রুট লেগ সম্পর্কে তথ্য বিশ্লেষণ করতে চান, তাহলে continueToNextDestination() কল করার আগে আপনাকে নেভিগেটর থেকে এটি পুনরুদ্ধার করতে হবে।
নিম্নলিখিত কোড উদাহরণে didArriveAtWaypoint ইভেন্ট পরিচালনা করার একটি পদ্ধতি দেখানো হয়েছে:
সুইফট
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 প্যারামিটারটি পরবর্তী গন্তব্যস্থলে পৌঁছানো পর্যন্ত আনুমানিক সময় সেকেন্ডে প্রদান করে।
সুইফট
funcnavigator(_navigator:GMSNavigator,didUpdateRemainingTimetime:TimeInterval){print("Time to next destination: \(time)")}
অবজেক্টিভ-সি
-(void)navigator:(GMSNavigator*)navigatordidUpdateRemainingTime:(NSTimeInterval)time{NSLog(@"Time to nextdestination:%f", time); }
পরবর্তী গন্তব্যে আনুমানিক সময়ের সর্বনিম্ন পরিবর্তন সেট করতে, GMSNavigator এ timeUpdateThreshold প্রপার্টি সেট করুন। মানটি সেকেন্ডে নির্দিষ্ট করা হয়। যদি এই প্রপার্টিটি সেট না করা থাকে, তাহলে পরিষেবাগুলি এক সেকেন্ডের ডিফল্ট মান ব্যবহার করে।
সুইফট
navigator?.timeUpdateThreshold=10
অবজেক্টিভ-সি
navigator.timeUpdateThreshold=10;
গন্তব্যস্থলের দূরত্বের আপডেট পাওয়া
গন্তব্যস্থল থেকে অবিচ্ছিন্ন দূরত্বের আপডেট পেতে, didUpdateRemainingDistance ইভেন্টটি পরিচালনা করার জন্য একটি পদ্ধতি তৈরি করুন। distance প্যারামিটারটি পরবর্তী গন্তব্যস্থলে আনুমানিক দূরত্ব মিটারে প্রদান করে।
সুইফট
funcnavigator(_navigator:GMSNavigator,didUpdateRemainingDistancedistance:CLLocationDistance){letmiles=distance*0.00062137print("Distance to nextdestination: \(miles) miles.")}
পরবর্তী গন্তব্যে আনুমানিক দূরত্বের সর্বনিম্ন পরিবর্তন সেট করতে, GMSNavigator এ distanceUpdateThreshold প্রপার্টি সেট করুন (মান মিটারে নির্দিষ্ট করা আছে)। যদি এই প্রপার্টি সেট না করা থাকে, তাহলে পরিষেবাগুলি এক মিটারের ডিফল্ট মান ব্যবহার করে।
সুইফট
navigator?.distanceUpdateThreshold=100
অবজেক্টিভ-সি
navigator.distanceUpdateThreshold=100;
ট্রাফিক আপডেট পাওয়া হচ্ছে
বাকি রুটের ট্র্যাফিক প্রবাহের ক্রমাগত আপডেট পেতে, didUpdateDelayCategory ইভেন্টটি পরিচালনা করার জন্য একটি পদ্ধতি তৈরি করুন। delayCategoryToNextDestination এ কল করলে GMSNavigationDelayCategory রিটার্ন করে যা 0 থেকে 3 এর মান প্রদান করে। ক্যাটাগরির আপডেটগুলি অ্যাপ ব্যবহারকারীর বর্তমান অবস্থানের উপর ভিত্তি করে তৈরি করা হয়। যদি ট্র্যাফিক ডেটা অনুপলব্ধ থাকে, তাহলে GMSNavigationDelayCategory 0 রিটার্ন করে। 1-3 সংখ্যাগুলি হালকা থেকে ভারী প্রবাহে বৃদ্ধি নির্দেশ করে।
সুইফট
funcnavigator(_navigator:GMSNavigator,didUpdatedelayCategory:GMSNavigationDelayCategory){print("Traffic flow to next destination:\(delayCategory)")}
অবজেক্টিভ-সি
-(void)navigator:(GMSNavigator*)navigatordidUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory{NSLog(@"Traffic flow to next destination: %ld",(long)delayCategory);}
GMSNavigationDelayCategory প্রপার্টি নিম্নলিখিত বিলম্বের মাত্রা প্রকাশ করে:
বিলম্ব বিভাগ
বিবরণ
GMSNavigationDelayCategoryNoData
০ - অনুপলব্ধ, ট্র্যাফিকের জন্য কোনও ডেটা নেই অথবা :
রুট।
GMSNavigationবিলম্ববিভাগভারী
১ - ভারী।
GMSNavigationবিলম্ববিভাগমাধ্যম
2 - মাঝারি।
GMSNavigationবিলম্ববিভাগআলো
৩ - আলো।
গতির আপডেট পাওয়া
ড্রাইভার যখন গতিসীমা অতিক্রম করে তখন আপডেট পেতে, didUpdateSpeedingPercentage ইভেন্টটি পরিচালনা করার জন্য একটি পদ্ধতি তৈরি করুন।
সুইফট
// Listener to handle speeding events. func navigator( _ navigator:GMSNavigator,didUpdateSpeedingPercentagepercentageAboveLimit:CGFloat){print("Speed is \(percentageAboveLimit) above the limit.")}
অবজেক্টিভ-সি
// Listener to handle speeding events. - (void)navigator:(GMSNavigator*)navigatordidUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit{NSLog(@"Speed is %f percent above the limit.",percentageAboveLimit);}
প্রস্তাবিত আলো মোড পরিবর্তন করা হচ্ছে
আলোর আনুমানিক পরিবর্তনের আপডেট পেতে, didChangeSuggestedLightingMode ইভেন্টটি পরিচালনা করার জন্য একটি পদ্ধতি তৈরি করুন।
সুইফট
// 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 }
অবজেক্টিভ-সি
// 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; }