রুট প্ল্যান করো

কখনও কখনও, আপনার অ্যাপ ব্যবহারকারীদের যে রুট প্রদান করে তা আপনি প্ল্যান করতে চাইতে পারেন। Routes API, Routes Preferred API বা Route Optimization API থেকে রাউট টোকেন ব্যবহার করে আপনি আপনার প্ল্যান করা রুটের জন্য দুটি জিনিস নির্দিষ্ট করতে পারবেন:

  • রুটের জন্য পলিলাইন

  • আপনার রুটের উদ্দেশ্য

যেমন, আপনার কাছে থাকতে পারে এমন রাউটিং উদ্দেশ্যের কিছু উদাহরণ এখানে দেওয়া হল:

  • ডেলিভারি করার সময় কমানো: খাবার ডেলিভারি করে এমন কোনও ব্যবসা খাবার ডেলিভারি করার সময় কমাতে চাইতে পারে।

  • ভ্রমণের সময় বা জ্বালানি খরচ কমানো: কোনও লজিস্টিক্স ব্যবসা তার ড্রাইভারদের দক্ষতা উন্নত করতে এবং জ্বালানি খরচ কমাতে চাইতে পারে।

  • গন্তব্যে পৌঁছানোর সময় কমানো: কোনও পরিষেবা ডিসপ্যাচ অপারেশন, অপারেটরদের জব অনুরোধে পৌঁছানোর সময় কমাতে চাইতে পারে।

  • খরচ কমানো এবং নিরাপত্তা উন্নত করা: রাইড-শেয়ারিং ব্যবসা এমন একটি রুট খুঁজতে চাইতে পারে যা রাইডারদের জন্য কম খরচ করে এবং নিরাপত্তার কারণে নির্দিষ্ট কিছু এলাকা এড়িয়ে যায়।

রুট টোকেন ব্যবহার করে রুট প্ল্যান করা সম্পর্কে আরও তথ্যের জন্য, রুট API-তে রুট টোকেনের অনুরোধ করুন এবং রুট অপ্টিমাইজেশন API-তে পলিলাইন ও রুট টোকেন ট্রানজিশন করুন দেখুন।

রুটের উদ্দেশ্যের জন্য কেন রুট টোকেন ব্যবহার করবেন

Routes API, Routes Preferred API বা Route Optimization API থেকে পাওয়া রুট টোকেনের সাহায্যে, প্রদান করা রুটের উপর আপনার আরও বেশি নিয়ন্ত্রণ থাকে:

  • সম্ভব হলে Navigation SDK ব্যবহার করার জন্য আগে থেকেই রুট প্ল্যান করে রাখুন।

  • Navigation SDK ব্যবহার করার জন্য সবচেয়ে ভাল রুট বেছে নিন। আপনি যদি Routes API-তে রুট জেনারেট করার সময় রুট টোকেনের অনুরোধ করেন, তাহলে প্রতিটি জেনারেট করা রুটের জন্য আপনি একটি করে রুট টোকেন পাবেন। তারপরে, আপনি যে রুট ব্যবহার করতে চান তার জন্য টোকেন বেছে নিতে পারবেন এবং সেটি Navigation SDK-তে পাস করতে পারবেন।

  • ETA ও দূরত্বের অনুমান সহ আগে থেকে ভাড়ার অনুমান করা। যদিও আসল খরচ ও সময় আলাদা হতে পারে, তবে এই আনুমানিক হিসেবটি প্রত্যাশিত ও আসল রুটের খরচের মধ্যে পার্থক্য কমিয়ে দেয়।

  • আরও উন্নত রুট অবজেক্টিভ নির্দিষ্ট করুন, যেমন ইকো রাউটিং বা সবচেয়ে ছোট রুট।

রুট টোকেন কীভাবে কাজ করে

আপনি Routes API, Routes Preferred API বা Route Optimization API ব্যবহার করে রুটের উদ্দেশ্য অনুযায়ী রুট প্ল্যান করতে পারবেন। আপনার গাড়ি কীভাবে রুট করবে তা নির্দেশ করার জন্য আপনি এই APIগুলির যেকোনও একটি থেকে ফেরত আসা রুট টোকেন Navigation SDK-তে পাস করতে পারেন।

আপনি কোনও রুট টোকেনের অনুরোধ জানালে এবং সেটি ব্যবহার করলে কী হয় তা এখানে দেওয়া হল:

  1. Routes API, Routes Preferred API বা Route Optimization API একটি এনক্রিপ্ট করা রুট টোকেন ফেরত দেয় যাতে রুট পলিলাইন ও রুটের উদ্দেশ্য অন্তর্ভুক্ত থাকে।

  2. আপনি Navigation SDK-তে রুট টোকেন পাস করেন।

  3. Navigation SDK রুট খুঁজে নেয় অথবা পরিস্থিতি পরিবর্তনের কারণে রুট উপলভ্য না থাকলে, এটি সবচেয়ে মানানসই রুট খুঁজে নেয়।

  4. রুট ধরে গাড়ি চালানোর সময়, ট্রাফিক বা রাস্তার অন্যান্য পরিস্থিতি পরিবর্তিত হলে অথবা গাড়িটি পরিকল্পিত রুট থেকে সরে গেলে, পরিবর্তিত রুটগুলি টোকেনে থাকা রুটের উদ্দেশ্যের উপর ভিত্তি করে সবচেয়ে ভাল রুটের সাথে ক্রমাগত মেলানোর চেষ্টা করে।

এই প্রসেস আপনার প্ল্যান করা রুটের সাথে আসল রুটের দূরত্বকে যতটা সম্ভব কম করে।

কেন একটি পরিকল্পিত রুট হুবহু অনুসরণ করা নাও হতে পারে

আপনার প্ল্যান করা রুট এবং রুটের উদ্দেশ্যকে অনুসরণ করার নির্দেশিকা হিসেবে ভাবুন: সেগুলি বাধ্যতামূলক নয়। আপনার পরিকল্পিত রুট এবং গাইডেড নেভিগেশনের মাধ্যমে দেখানো রুটের মধ্যে পার্থক্য দেখতে পেতে পারেন। রাস্তার অবস্থা, শুরুর লোকেশন বা অন্যান্য প্যারামিটারে পার্থক্যের কারণে এটি হতে পারে, যা আপনি পরিকল্পিত রুট তৈরি করার পর থেকে পরিবর্তিত হয়েছে। এই পার্থক্যের ফলে, দূরত্ব ও আনুমানিক সময় এবং অন্যান্য গুরুত্বপূর্ণ ট্রিপ কোয়ালিটি সংক্রান্ত আপনার প্ল্যান করা ও প্রকৃত লক্ষ্যের মধ্যে অমিল হতে পারে।

রুট টোকেন ব্যবহার করে রুট প্ল্যান করা

আপনি রুট টোকেন তৈরি করে এবং তারপরে এটি Navigation SDK-তে পাস করে একটি রুট প্ল্যান করতে পারেন, যেমনটি নিম্নলিখিত ধাপে বর্ণনা করা হয়েছে:

ধাপ ১: Routes API, Routes Preferred API বা Route Optimization API ব্যবহার করে একটি রুট টোকেন তৈরি করুন

  1. নিম্নলিখিত যেকোনও একটি পদ্ধতি ব্যবহার করে রুট টোকেনের অনুরোধ করুন:

  2. রুট টোকেন ব্যবহার করার প্রয়োজনীয়তা পূরণ করতে আপনার Routes API বা Routes Preferred API অনুরোধ সেট-আপ করুন:

    • travel_mode-কে DRIVE বা TWO_WHEELER-এ সেট করুন
    • routing_preference-কে TRAFFIC_AWARE বা TRAFFIC_AWARE_OPTIMAL-এ সেট করুন
    • Viaটি ওয়েপয়েন্ট ব্যবহার করবেন না

ধাপ ২: নেভিগেশন SDK-তে রুট টোকেন পাস করা

  1. রুট টোকেন স্টোর করা: Navigation SDK-তে, রুট টোকেন স্টোর করার জন্য একটি স্ট্রিং সেট-আপ করুন। যেমন:

    let routeToken = "route token returned by Routes API"
    

    ফেরত পাঠানো রুট টোকেনের উদাহরণ:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. mapView.navigator.setDestinations ব্যবহার করে Navigation SDK-তে রুট টোকেন পাস করুন। আপনি রুট তৈরি করার সময় যেসব গন্তব্যের ওয়েপয়েন্ট ব্যবহার করেছিলেন সেগুলিই উল্লেখ করুন token:

    mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})
    

    setDestinations পদ্ধতিটি অনুরোধের স্ট্যাটাসকে তার কলব্যাকে পাঠায়। এটি ব্যবহারকারীর লোকেশন থেকে উল্লিখিত গন্তব্যে পৌঁছানোর রুট খুঁজে পেলে, স্ট্যাটাস .OK (GMSRouteStatusOK) হয়।

একাধিক স্টপ সহ পরিস্থিতি

আপনি সর্বাধিক ২৫টি ওয়েপয়েন্ট কনফিগার করতে পারবেন।

setDestinations পদ্ধতিতে একাধিক স্টপ সহ যাত্রা করা যায় না। যাত্রার পরবর্তী লেগের জন্য ওয়েপয়েন্ট সেট করতে continueToNextDestinationWithCompletion() ব্যবহার করুন।

উদাহরণ

নিম্নলিখিত কোডের উদাহরণগুলি দেখায় যে কীভাবে একটি পরিকল্পিত রুট পুনরুদ্ধার করা যায়।

Swift

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint1 = GMSNavigationWaypoint(location: location, title: "waypoint from location")!
let waypoint2 = GMSNavigationWaypoint(placeID: "samplePlaceID", title: "waypoint from Place ID")!

let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint1 = [[GMSNavigationWaypoint alloc] initWithLocation:location title:@"waypoint from location"];
GMSNavigationWaypoint *waypoint2 = [[GMSNavigationWaypoint alloc] initWithPlaceID:@"samplePlaceID"
                                                                            title:@"waypoint from Place ID"];
NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator setDestinations:@[waypoint1, waypoint2]
                        routeToken:routeToken
                          callback:^(GMSRouteStatus routeStatus){...}];

রুট টোকেন ও নেভিগেশন SDK কীভাবে ইন্টার‍্যাক্ট করে

Navigation SDK-এর মাধ্যমে তৈরি করা রুট এবং রুট টোকেনে প্ল্যান করা রুট কীভাবে ইন্টার‍্যাক্ট করে তা এখানে দেওয়া হল:

  • আগে সেট করা যেকোনও গন্তব্য ওভাররাইড করে।

  • গাড়ির শুরুর লোকেশন ব্যবহার করে।

  • রাস্তা ও ট্রাফিক পরিস্থিতির জন্য অ্যাডজাস্ট করে। কেন কোনও প্ল্যান করা রুট হুবহু অনুসরণ করা নাও হতে পারে তা দেখুন।

  • নিম্নলিখিত রাউটিং-সম্পর্কিত বিকল্পগুলি অপ্রয়োজনীয় হিসেবে এড়িয়ে যায়:

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • ফলো করা:

    • ওয়েপয়েন্ট-সম্পর্কিত বিকল্প, যেমন রাস্তার-পাশে সংক্রান্ত পছন্দ।

    • রুটের উদ্দেশ্য। নেভিগেশন SDK-কে যদি ফেরানো রুট অ্যাডজাস্ট করতে হয়, তাহলে এটি রুট টোকেনের অনুরোধ করার সময় আপনার নির্দিষ্ট করা রুট অবজেক্টিভ ব্যবহার করে। এই কারণে, Routes API-তে আপনি যে ওয়েপয়েন্ট-সম্পর্কিত বিকল্প উল্লেখ করেছেন, আপনাকে সেই একই বিকল্প ব্যবহার করতে হবে।