নেভিগেশন ইভেন্ট শোনা

ব্যবহারকারী কোনও রুট ধরে নেভিগেট করার সময় পরিবর্তিত হয় এমন বিভিন্ন ইভেন্ট শুনতে ও সেগুলির উত্তর দিতে আপনার অ্যাপকে সক্ষম করতে এই নির্দেশিকা ব্যবহার করুন। এই নির্দেশিকায় রুট নির্ধারণ করার বিষয়ে কিছু বলা নেই, শুধু রুটে হওয়া ইভেন্টের ব্যাপারে বলা আছে।

এক নজরে

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 বর্তমান রোড-স্ন্যাপড দ্রাঘিমাংশ স্থানাঙ্ক।
কোর্স ডিগ্রিতে বর্তমান বিয়ারিং।
গতি বর্তমান স্পিড।
টাইমস্ট্যাম্প বর্তমান রিডিংয়ের তারিখ/সময়।

ক্রমাগত লোকেশন আপডেট পেতে, 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 রিটার্ন করে যা ০ থেকে ৩-এর মধ্যে ভ্যালু প্রদান করে। অ্যাপ ব্যবহারকারীর বর্তমান লোকেশনের উপর ভিত্তি করে বিভাগ আপডেট করা হয়। ট্রাফিক ডেটা উপলভ্য না থাকলে, GMSNavigationDelayCategory রিটার্ন ০ হয়। ১-৩ সংখ্যাগুলি হালকা থেকে ভারী ফ্লোর বৃদ্ধি নির্দেশ করে।

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 ০ - উপলভ্য নেই, ট্রাফিক বা -এর জন্য কোনও ডেটা নেই :
রুট।
GMSNavigationDelayCategoryHeavy ১ - খুব বেশি।
GMSNavigationDelayCategoryMedium ২ - মাঝারি।
GMSNavigationDelayCategoryLight ৩ - হালকা।

স্পিডিং সংক্রান্ত আপডেট পাওয়া হচ্ছে

কোনও ড্রাইভার স্পিড লিমিট অতিক্রম করলে আপডেট পেতে, 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;
}

অটোমেটিক ও ম্যানুয়াল লাইটিং মোড কনফিগারেশন সম্পর্কে আরও জানতে, স্বাভাবিক ও কম আলোর মোড কনফিগার করুন দেখুন।