ব্যবহারকারী কোনো পথ ধরে চলার সাথে সাথে পরিবর্তিত হওয়া বিভিন্ন ইভেন্ট শুনতে ও সেগুলিতে সাড়া দিতে আপনার অ্যাপকে সক্ষম করতে এই নির্দেশিকাটি ব্যবহার করুন। এই নির্দেশিকাটি পথ নির্ধারণ করা নিয়ে আলোচনা করে না, শুধুমাত্র পথ বরাবর ইভেন্টগুলিতে সাড়া দেওয়ার বিষয়টি এতে অন্তর্ভুক্ত।
সংক্ষিপ্ত বিবরণ
iOS-এর জন্য নেভিগেশন SDK আপনাকে ব্যবহারকারীর অবস্থান, পথের বিভিন্ন অবস্থা এবং গুরুত্বপূর্ণ সময় ও দূরত্বের তথ্যের সাথে সম্পর্কিত লিসেনার সরবরাহ করে। ম্যাপের ভিউ কন্ট্রোলারে, আপনার অ্যাপকে এই লিসেনারগুলোর জন্য GMSRoadSnappedLocationProviderListener এবং GMSNavigatorListener প্রোটোকলগুলো গ্রহণ করতে হবে।
এই তালিকাটি নেভিগেশন ইভেন্টের জন্য উপলব্ধ লিসেনার মেথডগুলো দেখায়:
-
GMSNavigatorListener.didArriveAtWaypoint, যা গন্তব্যে পৌঁছালে ট্রিগার হয়। -
GMSNavigatorListener.navigatorDidChangeRoute, যা রুট পরিবর্তনের সময় ট্রিগার হয়। - গাইডেন্স সক্রিয় থাকাকালীন, পরবর্তী গন্তব্যের সময় পরিবর্তনের সাথে সাথে
GMSNavigatorListener.didUpdateRemainingTimeবারবার কল করা হয়। - গাইডেন্স সক্রিয় থাকাকালীন, পরবর্তী গন্তব্যের দূরত্ব পরিবর্তিত হওয়ার সাথে সাথে
GMSNavigatorListener.didUpdateRemainingDistanceফাংশনটি বারবার কল করা হয়। -
GMSNavigatorListener.didUpdateDelayCategory, যা গাইডেন্স সক্রিয় থাকা অবস্থায় পরবর্তী গন্তব্যের বিলম্বের ক্যাটাগরি পরিবর্তিত হলে কল করা হয়। -
GMSNavigatorListener.didChangeSuggestedLightingMode, যা আনুমানিক আলোর অবস্থা আপডেট হলে ট্রিগার হয়। উদাহরণস্বরূপ, ব্যবহারকারীর বর্তমান অবস্থানে রাত হলে আলোর পরিবর্তন হয়। -
GMSNavigatorListener.didUpdateSpeedingPercentage, যা চালক গতিসীমা অতিক্রম করলে সক্রিয় হয়। -
GMSRoadSnappedLocationProviderListener.didUpdateLocation, যা ব্যবহারকারীর অবস্থান পরিবর্তনের সাথে সাথে বারবার কল করা হয়।
কোডটি দেখুন
প্রয়োজনীয় প্রোটোকলগুলির সাথে সঙ্গতি ঘোষণা করা
ন্যাভিগেশন মেথডগুলো প্রয়োগ করার আগে, ভিউ কন্ট্রোলারকে অবশ্যই নিম্নলিখিত প্রোটোকলগুলো গ্রহণ করতে হবে:
সুইফট
class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {
উদ্দেশ্য-সি
@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>
@end
ন্যাভিগেশন প্রোটোকলগুলো গ্রহণ করার পর, ভিউ কন্ট্রোলারে লিসেনারগুলো সেট করুন। উদাহরণস্বরূপ, আপনি viewDidLoad() মেথডে নিম্নলিখিত কোডটি যোগ করতে পারেন।
সুইফট
mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)
উদ্দেশ্য-সি
[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider
addListener:self];
অবস্থান আপডেট গ্রহণ বা বন্ধ করা
মানচিত্রে ব্যবহারকারীর অগ্রগতি দেখানোর জন্য অবস্থান হালনাগাদ করা প্রয়োজন।
location ইনস্ট্যান্সটি নিম্নলিখিত প্রোপার্টিগুলো প্রকাশ করে:
| অবস্থান সম্পত্তি | বর্ণনা |
|---|---|
| উচ্চতা | বর্তমান উচ্চতা। |
| স্থানাঙ্ক.অক্ষাংশ | রাস্তার ছবি তোলার সময়কার বর্তমান অক্ষাংশ স্থানাঙ্ক। |
| স্থানাঙ্ক.দ্রাঘিমাংশ | রাস্তার ছবি তোলার সময়কার বর্তমান দ্রাঘিমাংশ স্থানাঙ্ক। |
| কোর্স | বর্তমান বেয়ারিং ডিগ্রিতে। |
| গতি | বর্তমান গতি। |
| টাইমস্ট্যাম্প | বর্তমান পাঠের তারিখ/সময়। |
ক্রমাগত অবস্থানের আপডেট পেতে, mapView.roadSnappedLocationProvider.startUpdatingLocation কল করুন এবং didUpdateLocation ইভেন্টটি হ্যান্ডেল করার জন্য GMSRoadSnappedLocationProviderListener ব্যবহার করুন।
নিম্নলিখিত উদাহরণটি startUpdatingLocation কল করা দেখাচ্ছে:
সুইফট
mapView.roadSnappedLocationProvider.startUpdatingLocation()
উদ্দেশ্য-সি
[_mapView.roadSnappedLocationProvider startUpdatingLocation];
নিম্নলিখিত কোডটি একটি GMSRoadSnappedLocationProviderListener তৈরি করে যা didUpdateLocation ইভেন্টটি পরিচালনা করে।
সুইফট
func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider,
didUpdate location: CLLocation) { print("Location: \(location.description)") }
উদ্দেশ্য-সি
- (void)locationProvider:(GMSRoadSnappedLocationProvider *)locationProvider
didUpdateLocation:(CLLocation *)location { NSLog(@"Location: %@",
location.description); }
অ্যাপটি ব্যাকগ্রাউন্ডে থাকাকালীন লোকেশন আপডেট পেতে, allowsBackgroundLocationUpdates true-তে সেট করুন:
সুইফট
mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true
উদ্দেশ্য-সি
_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;
আগমন ইভেন্ট সনাক্তকরণ
আপনার অ্যাপ গন্তব্যে পৌঁছানোর পর তা শনাক্ত করতে didArriveAtWaypoint ইভেন্টটি ব্যবহার করে। আপনি continueToNextDestination() কল করে এবং তারপর গাইডেন্স পুনরায় চালু করার মাধ্যমে গাইডেন্স পুনরায় শুরু করতে ও পরবর্তী ওয়েপয়েন্টে যেতে পারেন। continueToNextDestination() কল করার পর আপনার অ্যাপকে অবশ্যই গাইডেন্স পুনরায় চালু করতে হবে।
অ্যাপটি continueToNextDestination কল করার পর, নেভিগেটরের কাছে পূর্ববর্তী গন্তব্য সম্পর্কে আর কোনো ডেটা থাকে না। আপনি যদি কোনো রুট লেগ সম্পর্কে তথ্য বিশ্লেষণ করতে চান, তবে continueToNextDestination() কল করার আগে আপনাকে অবশ্যই নেভিগেটর থেকে সেই তথ্য পুনরুদ্ধার করতে হবে।
নিম্নলিখিত কোড উদাহরণটি didArriveAtWaypoint ইভেন্টটি পরিচালনা করার একটি পদ্ধতি দেখায়:
সুইফট
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }
উদ্দেশ্য-সি
- (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 প্রোপার্টিগুলো ব্যবহার করে নতুন রুটটি অ্যাক্সেস করতে পারবেন।
সুইফট
func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }
উদ্দেশ্য-সি
- (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route
has changed."); }
গন্তব্যে পৌঁছানোর সময় আপডেট গ্রহণ করা
গন্তব্যে পৌঁছানোর সময়ের ক্রমাগত আপডেট পেতে, didUpdateRemainingTime ইভেন্টটি হ্যান্ডেল করার জন্য একটি মেথড তৈরি করুন। time প্যারামিটারটি পরবর্তী গন্তব্যে পৌঁছানোর আনুমানিক সময় (সেকেন্ডে) প্রদান করে।
সুইফট
func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time:
TimeInterval) { print("Time to next destination: \(time)") }
উদ্দেশ্য-সি
- (void)navigator:(GMSNavigator *)navigator
didUpdateRemainingTime:(NSTimeInterval)time { NSLog(@"Time to next
destination: %f", time); }
পরবর্তী গন্তব্যে পৌঁছানোর আনুমানিক সময়ের ন্যূনতম পরিবর্তন নির্ধারণ করতে, GMSNavigator এর timeUpdateThreshold প্রপার্টিটি সেট করুন। এর মান সেকেন্ডে নির্দিষ্ট করা হয়। যদি এই প্রপার্টিটি সেট করা না থাকে, তাহলে সার্ভিসগুলো এক সেকেন্ডের একটি ডিফল্ট মান ব্যবহার করে।
সুইফট
navigator?.timeUpdateThreshold = 10
উদ্দেশ্য-সি
navigator.timeUpdateThreshold = 10;
গন্তব্যের দূরত্বের আপডেট গ্রহণ করা হচ্ছে
গন্তব্যের দূরত্বের ক্রমাগত আপডেট পেতে, didUpdateRemainingDistance ইভেন্টটি হ্যান্ডেল করার জন্য একটি মেথড তৈরি করুন। distance প্যারামিটারটি পরবর্তী গন্তব্যের আনুমানিক দূরত্ব মিটারে প্রদান করে।
সুইফট
func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distance:
CLLocationDistance) { let miles = distance * 0.00062137 print("Distance to next
destination: \(miles) miles.") }
উদ্দেশ্য-সি
- (void)navigator:(GMSNavigator *)navigator
didUpdateRemainingDistance:(CLLocationDistance)distance { double miles =
distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Distance to
next destination: %.2f.", miles]); }
পরবর্তী গন্তব্যে আনুমানিক দূরত্বের ন্যূনতম পরিবর্তন নির্ধারণ করতে, GMSNavigator এ distanceUpdateThreshold প্রপার্টিটি সেট করুন (মান মিটারে নির্দিষ্ট করা হয়)। যদি এই প্রপার্টিটি সেট করা না থাকে, তাহলে সার্ভিসগুলো এক মিটারের একটি ডিফল্ট মান ব্যবহার করে।
সুইফট
navigator?.distanceUpdateThreshold = 100
উদ্দেশ্য-সি
navigator.distanceUpdateThreshold = 100;
ট্র্যাফিক আপডেট গ্রহণ করা হচ্ছে
অবশিষ্ট রুটের ট্র্যাফিক প্রবাহের ক্রমাগত আপডেট পেতে, didUpdateDelayCategory ইভেন্টটি হ্যান্ডেল করার জন্য একটি মেথড তৈরি করুন। delayCategoryToNextDestination কল করলে GMSNavigationDelayCategory রিটার্ন হয়, যা ০ থেকে ৩ পর্যন্ত একটি মান প্রদান করে। ক্যাটাগরির আপডেট অ্যাপ ব্যবহারকারীর বর্তমান অবস্থানের উপর ভিত্তি করে হয়। যদি ট্র্যাফিক ডেটা অনুপলব্ধ থাকে, তাহলে GMSNavigationDelayCategory ০ রিটার্ন করে। ১-৩ সংখ্যাগুলো হালকা থেকে ভারী প্রবাহের বৃদ্ধি নির্দেশ করে।
সুইফট
func navigator(_ navigator: GMSNavigator, didUpdate delayCategory:
GMSNavigationDelayCategory) { print("Traffic flow to next destination:
\(delayCategory)") }
উদ্দেশ্য-সি
- (void)navigator:(GMSNavigator *)navigator
didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory {
NSLog(@"Traffic flow to next destination: %ld", (long)delayCategory); }
GMSNavigationDelayCategory প্রপার্টিটি নিম্নলিখিত বিলম্বের স্তরগুলি প্রকাশ করে:
| বিলম্ব বিভাগ | বর্ণনা |
|---|---|
| GMSNavigationDelayCategoryNoData | ০ - অনুপলব্ধ, ট্র্যাফিকের জন্য কোনো ডেটা নেই অথবা : |
| পথটা। | |
| জিএমএসন্যাভিগেশনডিলেক্যাটাগরিহেভি | ১ - ভারী। |
| জিএমএসন্যাভিগেশনডিলেক্যাটাগরিমিডিয়াম | ২ - মাঝারি। |
| জিএমএসন্যাভিগেশনডিলেক্যাটাগরিলাইট | ৩ - আলো। |
দ্রুত আপডেট গ্রহণ করা হচ্ছে
চালক যখন গতিসীমা অতিক্রম করবে তখন আপডেট পাওয়ার জন্য, didUpdateSpeedingPercentage ইভেন্টটি হ্যান্ডেল করার জন্য একটি মেথড তৈরি করুন।
সুইফট
// Listener to handle speeding events. func navigator( _ navigator:
GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) {
print("Speed is \(percentageAboveLimit) above the limit.") }
উদ্দেশ্য-সি
// Listener to handle speeding events. - (void)navigator:(GMSNavigator
*)navigator didUpdateSpeedingPercentage:(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, didChangeSuggestedLightingMode lightingMode:
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 *)navigator didChangeSuggestedLightingMode:
(GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested lighting mode has
changed: %ld", (long)lightingMode);
// Make the suggested change. _mapView.lightingMode = lightingMode; }