এই নির্দেশিকাটি কাদের জন্য: আপনি যদি একজন মোবাইল ডেভেলপার হন এবং ট্রাক, বাস বা অন্যান্য বড় বাণিজ্যিক যানবাহনের চালকদের জন্য টার্ন-বাই-টার্ন নেভিগেশন অভিজ্ঞতা তৈরির দায়িত্বে থাকেন, তাহলে এই নির্দেশিকাটি পড়ুন।
এই নির্দেশিকায় যা আলোচনা করা হয়েছে: Routes API বা Route Optimization API দ্বারা তৈরি একটি ট্রাক-নির্দিষ্ট রুটকে কীভাবে Android-এর জন্য Navigation SDK ব্যবহার করে একটি টার্ন-বাই-টার্ন নেভিগেশন সেশন পরিচালনার কাজে লাগানো যায়, তা এই নির্দেশিকায় ব্যাখ্যা করা হয়েছে।
আপনি যা শিখবেন
আপনি নিম্নলিখিত কাজগুলো করতে শিখবেন:
- ব্যাকএন্ড রুট প্ল্যানিংকে ইন-অ্যাপ নেভিগেশন অভিজ্ঞতার সাথে সংযুক্ত করতে একটি
routeTokenব্যবহার করুন । - পূর্ব-পরিকল্পিত ট্রাক রুট ব্যবহার করার জন্য নেভিগেশন SDK কনফিগার করুন ।
- নেভিগেশন UI-তে ট্রাক-নির্দিষ্ট বিধিনিষেধগুলো চালকের কাছে কীভাবে প্রদর্শিত হয়, তা বুঝুন ।
পূর্বশর্ত
শুরু করার আগে, নিশ্চিত করুন যে আপনি নিম্নলিখিত শর্তগুলো পূরণ করেছেন:
১. আপনার প্রকল্পের জন্য প্রবেশাধিকারের অনুরোধ করুন
বৃহৎ যানবাহন রুটিং পরিষেবা সীমিত সংখ্যক গ্রাহকদের জন্য উপলব্ধ। আগ্রহ প্রকাশ করতে এবং আপনার গুগল ক্লাউড প্রকল্পের জন্য অ্যাক্সেসের অনুরোধ জানাতে, যোগাযোগ ফর্মটি পূরণ করুন। গুগলের একজন প্রতিনিধি পরবর্তী পদক্ষেপগুলো নিয়ে আপনার সাথে যোগাযোগ করবেন।
গুগল অ্যাক্সেস দেওয়ার পর, নিশ্চিত করুন যে আপনার গুগল ক্লাউড প্রজেক্টটি বড় যানবাহন রাউটিংয়ের জন্য প্রস্তুত করা আছে।
আপনার সংস্থা যদি ব্যাকএন্ড রাউটিং এপিআই এবং মোবাইল নেভিগেশন এসডিকে-এর জন্য আলাদা গুগল ক্লাউড প্রজেক্ট ব্যবহার করে থাকে, তাহলে প্রতিটি প্রজেক্ট প্রোভিশন করার জন্য গুগলের সাথে যোগাযোগ করুন।
২. ব্যাকএন্ড রাউট জেনারেশন সেট আপ করুন এবং একটি রাউট টোকেন সংগ্রহ করুন।
ডিভাইসে নেভিগেশন শুরু করার আগে, আপনার ব্যাকএন্ড সার্ভারকে অবশ্যই নিম্নলিখিত API গুলোর মধ্যে যেকোনো একটি ব্যবহার করে একটি ট্রাক রুট তৈরি করতে হবে এবং একটি routeToken সংগ্রহ করতে হবে:
- রুটস এপিআই : উৎস এবং গন্তব্যের মধ্যে একক ট্রাকের রুট গণনা করার জন্য এটি সুপারিশ করা হয়। সেটআপ নির্দেশাবলীর জন্য, 'বড় গাড়ির রুট ও আনুমানিক সময় তৈরি করুন ' দেখুন।
- রুট অপটিমাইজেশন এপিআই : একটি ফ্লিট জুড়ে একাধিক স্টপযুক্ত রুট অপটিমাইজ করার জন্য এটি সুপারিশ করা হয়। আরও তথ্যের জন্য, রুট অপটিমাইজেশন এপিআই লার্জ ভেহিকেল রাউটিং গাইডটি দেখুন।
আপনার ব্যাকএন্ড অনুরোধে অবশ্যই travelMode: TRUCK উল্লেখ করতে হবে এবং এর সাথে গাড়ির ভৌত বৈশিষ্ট্যগুলোও (উচ্চতা, প্রস্থ, দৈর্ঘ্য, ওজন, অ্যাক্সেল সংখ্যা এবং বিপজ্জনক কার্গো) জানাতে হবে। রাউটিং এপিআই তার প্রতিক্রিয়ায় একটি routeToken ফেরত দেয়, যা আপনার ব্যাকএন্ড সার্ভার আপনার মোবাইল অ্যাপে পাঠিয়ে দেয়।
৩. ন্যূনতম SDK এবং সিস্টেমের প্রয়োজনীয়তা পূরণ করুন
আপনার অ্যাপে অবশ্যই ন্যূনতম প্রয়োজনীয় নেভিগেশন এসডিকে সংস্করণ ৫.২.০ বা তার পরবর্তী সংস্করণ ব্যবহার করতে হবে।এছাড়াও, আপনার প্রজেক্টকে অবশ্যই স্ট্যান্ডার্ড নেভিগেশন এসডিকে সেটআপের শর্তাবলী পূরণ করতে হবে।
সীমাবদ্ধতা এবং পরিচালন নির্দেশিকা
শুরু করার আগে, নিম্নলিখিত সীমাবদ্ধতা এবং কার্যপ্রণালী নির্দেশিকাগুলো লক্ষ্য করুন:
- ভৌগোলিক প্রাপ্যতা : বড় যানবাহন রুট নির্ধারণ ব্যবস্থাটি মার্কিন যুক্তরাষ্ট্রের সংলগ্ন ৪৮টি রাজ্যে (সাধারণভাবে উপলব্ধ) এবং জাপানে (পরীক্ষামূলক) উপলব্ধ। এটি আলাস্কা, হাওয়াই বা মার্কিন যুক্তরাষ্ট্রের অধীনস্থ অঞ্চলগুলিতে উপলব্ধ নয়।
- চালকের জন্য পরামর্শ ও নিরাপত্তা : চালকদের অবশ্যই নিরাপদ বা আইনসম্মত হওয়ার জন্য শুধুমাত্র নেভিগেশন এসডিকে (SDK) দ্বারা প্রদত্ত রুটের উপর নির্ভর করা উচিত নয়। সব ধরনের রাস্তার পরিস্থিতিতে রুটগুলো গাড়ির জন্য উপযুক্ত নাও হতে পারে এবং সেগুলো অনুসরণ করলে চালকরা কম উচ্চতার রাস্তা বা ওজন-সীমাবদ্ধ রাস্তার মতো বিপদের সম্মুখীন হতে পারেন। চালকদের অবশ্যই সর্বদা সতর্ক থাকতে হবে এবং রাস্তার নির্দেশিকা চিহ্ন ও স্থানীয় নিয়মকানুন মেনে চলতে হবে।
- বেস্ট-এফোর্ট রুট (Best-effort routes) : যখন রাউটিং এপিআই (routing API) যানবাহনের বিধিনিষেধ সম্পূর্ণরূপে মেনে চলে এমন কোনো রুট খুঁজে পায় না, তখন এটি একটি "বেস্ট এফোর্ট" রুট ফেরত দেয় যা সীমাবদ্ধ অংশগুলির মধ্য দিয়ে যেতে পারে। উদাহরণস্বরূপ, রুটস এপিআই (Routes API) তার রেসপন্সে
routeRestrictionsPartiallyIgnoredফ্ল্যাগটি সেট করে। এই রুটগুলিতে নেভিগেট করার সময়, নেভিগেশন এসডিকে (Navigation SDK) প্রাসঙ্গিক বিধিনিষেধগুলি হাইলাইট করার জন্য রুট কলআউট (route callouts) প্রদর্শন করে। এই ক্ষেত্রে সাবধানে রুট পরিকল্পনা করুন এবং পরিকল্পনা বা নেভিগেশনের জন্য ফ্ল্যাগযুক্ত কোনো রুটকে তথ্যের একমাত্র উৎস হিসেবে ব্যবহার করবেন না। - অসমর্থিত বৈশিষ্ট্যসমূহ : বৃহৎ যানবাহন রাউটিং নিম্নলিখিত বৈশিষ্ট্যগুলি সমর্থন করে না:
- ট্রাক টোলের মূল্য নির্ধারণ
- ট্রাক বা ভারী যানবাহনের জন্য নির্দিষ্ট গতিসীমা
- তেজস্ক্রিয় বিপজ্জনক পদার্থের জন্য রাউটিং
- ব্যবহারের সীমা : নেভিগেশন এসডিকে-তে করা অনুরোধগুলো সাধারণ ব্যবহার এবং কোটা সীমা অনুসরণ করে। আরও তথ্যের জন্য, ব্যবহার এবং বিলিং দেখুন।
ট্রাক-নির্দিষ্ট UI (রুট কলআউট) প্রদর্শন করুন
নেভিগেশন এসডিকে স্বয়ংক্রিয়ভাবে ম্যাপে রুট কলআউট নামক ভিজ্যুয়াল সতর্কতা প্রদর্শন করে, যা চালকদের আসন্ন ট্রাক চলাচলের বিধিনিষেধ সম্পর্কে সতর্ক করে। পরিকল্পিত রুটে থাকা বিধিনিষেধের জন্য কলআউটগুলো প্রদর্শিত হয়, কিন্তু কাছাকাছি অন্য রাস্তায় তা দেখা যায় না।
নেভিগেশন এসডিকে-তে নিম্নলিখিত সীমাবদ্ধতাগুলির জন্য কলআউট অন্তর্ভুক্ত রয়েছে:
| সীমাবদ্ধতা | কলআউট আইকন এবং টেক্সট | প্রদর্শনের শর্তাবলী |
|---|---|---|
| উচ্চতা | ![]() হলুদ = সতর্কীকরণ, আপনার যানবাহনটি অনুমোদিত সর্বোচ্চ উচ্চতার কাছাকাছি রয়েছে। ![]() লাল = আপনার যানবাহনটি অনুমোদিত সর্বোচ্চ উচ্চতার উপরে রয়েছে | গাড়ির উচ্চতা নির্ধারিত সীমার কাছাকাছি চলে এলে একটি হলুদ সংকেত প্রদর্শিত হয়। ![]() যদি পথটি নিয়মবহির্ভূত হয় এবং উচ্চতার সীমাবদ্ধতা লঙ্ঘন করে, তাহলে একটি লাল চিহ্ন প্রদর্শিত হয়। ![]() |
| ওজন | ![]() | গাড়ির ওজন রাস্তার নির্ধারিত সীমা অতিক্রম করলে একটি লাল সংকেত প্রদর্শিত হয়। ![]() |
| ট্রাক নিষিদ্ধ | ![]() | যেসব সড়ক অংশে বাণিজ্যিক ট্রাক চলাচলের ওপর নিষেধাজ্ঞা রয়েছে, সেসব অংশে ভ্রমণের সময় একটি লাল সংকেত দেখা যায়। ![]() |
| বিপজ্জনক পণ্য | ![]() | রাস্তার কোনো অংশে যানবাহনের বিপজ্জনক পদার্থ বহন নিষিদ্ধ হলে একটি লাল সংকেত প্রদর্শিত হয়। ![]() |
রুট টোকেনগুলি কীভাবে কাজ করে
routeToken হলো গুগলের রাউটিং ব্যাকএন্ড দ্বারা তৈরি একটি রুটের এনক্রিপ্টেড স্ন্যাপশট। এটি পরিকল্পিত রুটের জ্যামিতি, সেইসাথে যানবাহনের ভৌত মাত্রা এবং বিধিনিষেধের প্রোফাইলকে অন্তর্ভুক্ত করে।
কার্যপ্রবাহটি নিম্নলিখিত ধাপগুলো অনুসরণ করে:
- রুটের অনুরোধ : আপনার ব্যাকএন্ড সার্ভার রুটস এপিআই (বা রুট অপটিমাইজেশন এপিআই ) থেকে একটি ট্রাক রুটের জন্য অনুরোধ করে।
- টোকেন গ্রহণ : রাউটিং এপিআই সঙ্গতিপূর্ণ রুটটি নির্ণয় করে এবং আপনার ব্যাকএন্ড সার্ভারে একটি
routeTokenফেরত পাঠায়। - টোকেন ফরোয়ার্ড করুন : আপনার ব্যাকএন্ড সার্ভার আপনার মোবাইল অ্যাপে
routeTokenএবং গন্তব্যের স্থানাঙ্ক প্রেরণ করে। - এসডিকে-তে প্রেরণ : মোবাইল অ্যাপটি
routeTokenনেভিগেশন এসডিকে- তে প্রেরণ করে। - নির্দেশনা শুরু করুন : নেভিগেশন এসডিকে ধাপে ধাপে দিকনির্দেশনার অভিজ্ঞতার সমস্ত দিক পরিচালনা করে , যার মধ্যে রয়েছে রুট কলআউট রেন্ডার করা এবং গাড়ির সীমাবদ্ধতা অনুযায়ী ডাইনামিক রিরাউটিং পরিচালনা করা।
গতিশীল পুনঃগণনা এবং পুনঃরুটিং
সক্রিয় নেভিগেশনের সময়, যানজটের অবস্থা, রাস্তা বন্ধ থাকা বা ভুল মোড়ের কারণে যানবাহনটি পরিকল্পিত পথ থেকে বিচ্যুত হতে পারে।
যখন পথ পরিবর্তন করা হয়:
- নেভিগেশন এসডিকে স্বয়ংক্রিয়ভাবে গন্তব্যের পথ পুনরায় গণনা করে।
- এসডিকে মূল
routeTokenএ এনকোড করা গাড়ির বৈশিষ্ট্য এবং মাত্রা অক্ষুণ্ণ রাখে। - নতুনভাবে গণনা করা পথটি নিচু স্থান, ওজন-সীমাবদ্ধ সেতু এবং বাণিজ্যিক ট্রাকের জন্য নিষিদ্ধ রাস্তা এড়িয়ে চলে।
বাস্তবায়ন: ট্রাক-নির্দিষ্ট একটি ট্রিপ শুরু করুন
বড় গাড়ির রুট টোকেন ব্যবহার করে টার্ন-বাই-টার্ন নেভিগেশন চালু ও শুরু করতে এই ধাপগুলো অনুসরণ করুন।
ধাপ ১: আপনার ব্যাকএন্ড থেকে রাউট টোকেনটি সংগ্রহ করুন।
আপনার মোবাইল অ্যাপ আপনার ব্যাকএন্ড সার্ভার থেকে গন্তব্যের স্থানাঙ্ক সহ routeToken স্ট্রিংটি গ্রহণ করে। আপনার সার্ভারে এই টোকেনটি তৈরি করার বিষয়ে বিস্তারিত জানতে, Routes API ডকুমেন্টেশনের "Generate large vehicle routes & ETAs" অংশটি দেখুন।
নিম্নলিখিত কোডটি একটি উদাহরণ রাউট টোকেন:
{
"routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g"
}
ধাপ ২: CustomRoutesOptions কনফিগার করুন
CustomRoutesOptions.builder ব্যবহার করে একটি CustomRoutesOptions ইনস্ট্যান্সে রাউট টোকেনটি পাস করুন:
-
setRouteToken(routeToken)ব্যবহার করে টোকেনটি পাস করুন। -
setTravelMode(CustomRoutesOptions.TravelMode.DRIVING)ব্যবহার করে ভ্রমণ মোড সেট করুন।
ধাপ ৩: ওয়েপয়েন্ট নির্ধারণ করুন এবং গন্তব্যস্থল ঠিক করুন
আপনার গন্তব্য ওয়েপয়েন্ট এবং CustomRoutesOptions navigator.setDestinations এ পাস করুন।
ওয়েপয়েন্ট কনফিগার করার সময় এবং কাস্টম রুট অপশন পাস করার সময়, নিম্নলিখিত বিষয়গুলো মনে রাখবেন:
- গন্তব্য মিলের আবশ্যকতা :
setDestinationsএ প্রদত্ত গন্তব্য স্থানাঙ্ক অবশ্যইrouteTokenতৈরি করার সময় ব্যবহৃত গন্তব্য স্থানাঙ্কের সাথে মিলতে হবে। ভিন্ন গন্তব্য নির্দিষ্ট করলে একটি ত্রুটি দেখা দেয়। - রাস্তার পাশ দিয়ে পথনির্দেশনা : বড় বাণিজ্যিক যানবাহনগুলো সরু রাস্তায় সহজে ইউ-টার্ন নিতে পারে না। ট্রাকটি যাতে রাস্তার সঠিক পাশ দিয়ে গন্তব্যে পৌঁছায়, তা নিশ্চিত করতে আপনার ওয়েপয়েন্টগুলোতে
setPreferSameSideOfRoad(true)কল করুন। - যানবাহন থামানো : ট্রাকটিকে থামানো বা মাল খালাস করার জন্য একটি উপযুক্ত স্থানে নির্দেশ দিতে, আপনার ওয়েপয়েন্টগুলিতে
setVehicleStopover(true)কল করুন। - নেভিগেশন পয়েন্ট : আপনার গন্তব্যে যদি কোনো নির্দিষ্ট মালবাহী প্রবেশপথ বা লোডিং ডক থাকে, তাহলে একটি নেভিগেশন পয়েন্ট টোকেন ব্যবহার করে তা নির্দিষ্ট করুন।
ধাপ ৪: রুটের অবস্থা পরিচালনা করুন এবং নির্দেশনা শুরু করুন
ListenableResultFuture<Navigator.RouteStatus> -এ একটি OnResultListener রেজিস্টার করুন। যখন রাউটের স্ট্যাটাস OK হবে, তখন সক্রিয় টার্ন-বাই-টার্ন নেভিগেশন শুরু করতে navigator.startGuidance কল করুন।
কোডের উদাহরণ
টোকেন সেট করার জন্য CustomRoutesOptions.builder ব্যবহার করুন এবং তারপর সেটি navigator.setDestinations এ পাস করুন।
// Obtain the routeToken string from your backend
val routeToken = "route token returned by Routes API"
val customRoutesOptions = CustomRoutesOptions.builder()
.setRouteToken(routeToken)
.setTravelMode(TravelMode.DRIVING)
.build()
// Specify the same destination used to create the route token
ArrayList <Waypoint> destinations = Lists.newArrayList();
val destination = Waypoint.builder()
.setLatLng(10.0, 20.0)
.setTitle("title")
.setVehicleStopover(true)
.build()
destinations.add(destination);
navigator.setDestinations(destinations, customRoutesOptions)
গাড়ির ভেতরের ডিসপ্লে
আপনি Navigation for Android Auto ব্যবহার করে গাড়ির বড় নেভিগেশন সেশনটি ড্যাশবোর্ডের স্ক্রিনে প্রজেক্ট করতে পারেন।পরবর্তী পদক্ষেপ
- নেভিগেশন UI পরিবর্তন করুন : কম্পাস, রিসেন্টার বাটন এবং ক্যামেরা পার্সপেক্টিভের মতো বিল্ট-ইন UI কন্ট্রোল ও ভিজ্যুয়াল এলিমেন্টগুলো কাস্টমাইজ করুন।
- নেভিগেশন ইভেন্ট শুনুন : নেভিগেশন আপডেট এবং লাইফসাইকেল ইভেন্টগুলি পরিচালনা করুন, যেমন রুটের অগ্রগতি, আনুমানিক পৌঁছানোর সময়ের (ETA) পরিবর্তন এবং রিরুট।









