Directions Service (লিগ্যাসি)

ইউরোপীয় অর্থনৈতিক অঞ্চল (EEA)-এর ডেভেলপার
মনে রাখবেন: সার্ভার-সাইড লাইব্রেরি

এক নজরে

আপনি DirectionsService অবজেক্ট ব্যবহার করে দিকনির্দেশ (বিভিন্ন ধরনের পরিবহন পদ্ধতি ব্যবহার করে) গণনা করতে পারবেন। এই অবজেক্ট Google Maps API Directions Service-এর সাথে যোগাযোগ করে যা দিকনির্দেশের অনুরোধ গ্রহণ করে এবং একটি দক্ষ পাথ রিটার্ন করে। ভ্রমণের সময় হল প্রাথমিক ফ্যাক্টর যা অপ্টিমাইজ করা হয়, তবে দূরত্ব, কতবার ঘুরতে হবে এবং আরও অনেক কিছুর মতো অন্যান্য ফ্যাক্টরও বিবেচনা করা হতে পারে। আপনি নিজে এইসব দিকনির্দেশ সংক্রান্ত ফলাফল ম্যানেজ করতে পারেন অথবা DirectionsRenderer অবজেক্ট ব্যবহার করে এইসব ফলাফল দেখাতে পারেন।

দিকনির্দেশের অনুরোধে উৎস বা গন্তব্য নির্দিষ্ট করার সময়, আপনি একটি কোয়েরি স্ট্রিং (যেমন, "Chicago, IL" বা "Darwin, NSW, Australia"), একটি LatLng ভ্যালু বা একটি স্থান অবজেক্ট নির্দিষ্ট করতে পারেন।

দিকনির্দেশ পরিষেবা একাধিক ওয়েপয়েন্ট ব্যবহার করে মাল্টি-পার্ট দিকনির্দেশ ফেরত দিতে পারে। দিকনির্দেশগুলি ম্যাপে রুট আঁকার জন্য পলিলাইন হিসেবে অথবা <div> এলিমেন্টের মধ্যে টেক্সট হিসেবে দেখানো হয় (যেমন, "উইলিয়ামসবার্গ ব্রিজ র‍্যাম্পে ডানদিকে ঘুরুন")।

শুরু করা

Maps JavaScript API-তে Directions পরিষেবা ব্যবহার করার আগে, প্রথমে নিশ্চিত করুন যে Google Cloud কনসোলে Directions API (Legacy) চালু আছে, একই প্রোজেক্টে যা আপনি Maps JavaScript API-এর জন্য সেট-আপ করেছেন।

আপনার চালু করা API-এর তালিকা দেখতে:

  1. Google Cloud Console-এ যান।
  2. প্রোজেক্ট বেছে নিন বোতামে ক্লিক করুন, তারপর Maps JavaScript API-এর জন্য সেট-আপ করা একই প্রোজেক্ট বেছে নিয়ে খুলুন বিকল্পে ক্লিক করুন।
  3. ড্যাশবোর্ড-এ API-এর তালিকা থেকে Directions API (পুরনো) খুঁজুন।
  4. তালিকায় API দেখতে পেলে, আপনি একদম রেডি। API তালিকাভুক্ত না থাকলে, https://console.cloud.google.com/apis/library/directions-backend.googleapis.com থেকে এটি চালু করুন

দাম ও নীতি

দাম

JavaScript Directions পরিষেবার দাম ও ব্যবহার সংক্রান্ত নীতি সম্পর্কে জানতে, Directions API (Legacy)-এর জন্য ব্যবহার ও বিলিং দেখুন।

নীতি

Directions API (Legacy)-এর জন্য বর্ণিত নীতি অনুসারে Directions পরিষেবা ব্যবহার করতে হবে।

দিকনির্দেশের অনুরোধ

দিকনির্দেশ পরিষেবা অ্যাক্সেস করা অ্যাসিঙ্ক্রোনাস, কারণ Google Maps API-কে একটি বাহ্যিক সার্ভারে কল করতে হবে। সেই কারণে, অনুরোধ সম্পূর্ণ হওয়ার পরে কার্যকর করার জন্য আপনাকে একটি কলব্যাক পদ্ধতি পাস করতে হবে। এই কলব্যাক পদ্ধতি ফলাফল প্রসেস করবে। মনে রাখবেন যে Directions পরিষেবা একাধিক সম্ভাব্য ভ্রমণসূচী আলাদা routes[]-এর অ্যারে হিসেবে দেখাতে পারে।

Maps JavaScript API-তে দিকনির্দেশ ব্যবহার করতে, DirectionsService ধরনের অবজেক্ট তৈরি করুন এবং দিকনির্দেশ পরিষেবায় অনুরোধ শুরু করতে DirectionsService.route() কল করুন, এটিতে DirectionsRequest অবজেক্ট লিটারাল পাস করুন যার মধ্যে ইনপুট শব্দ এবং উত্তর পাওয়ার পরে এক্সিকিউট করার জন্য কলব্যাক পদ্ধতি থাকে।

DirectionsRequest অবজেক্ট লিটারাল-এ নিম্নলিখিত ফিল্ডগুলি থাকে:

{
  origin: LatLng | String | google.maps.Place,
  destination: LatLng | String | google.maps.Place,
  travelMode: TravelMode,
  transitOptions: TransitOptions,
  drivingOptions: DrivingOptions,
  unitSystem: UnitSystem,
  waypoints[]: DirectionsWaypoint,
  optimizeWaypoints: Boolean,
  provideRouteAlternatives: Boolean,
  avoidFerries: Boolean,
  avoidHighways: Boolean,
  avoidTolls: Boolean,
  region: String
}

এইসব ফিল্ডের ব্যাপারে নিচে ব্যাখ্যা করা হয়েছে:

  • origin (প্রয়োজন) শুরুর লোকেশন নির্দিষ্ট করে যেখান থেকে দিকনির্দেশ গণনা করা হবে। এই ভ্যালু String (যেমন, "শিকাগো, IL"), LatLng ভ্যালু বা জায়গা অবজেক্ট হিসেবে নির্দিষ্ট করা হতে পারে। আপনি জায়গা অবজেক্ট ব্যবহার করলে, একটি জায়গার আইডি, কোয়েরি স্ট্রিং বা একটি LatLng লোকেশন নির্দিষ্ট করতে পারবেন। আপনি Maps JavaScript API-তে Geocoding, Place Search এবং Place Autocomplete পরিষেবা থেকে প্লেস আইডি ফিরিয়ে আনতে পারবেন। Place Autocomplete থেকে পাওয়া প্লেস আইডি ব্যবহার করার উদাহরণ দেখতে, Place Autocomplete এবং দিকনির্দেশ দেখুন।
  • destination (প্রয়োজনীয়) গন্তব্য লোকেশন নির্দিষ্ট করে যার জন্য দিকনির্দেশ গণনা করা হবে। উপরে বর্ণিত origin ফিল্ডের মতো একই বিকল্প এখানেও আছে।
  • travelMode (প্রয়োজন) দিকনির্দেশ গণনা করার সময় কোন ধরনের পরিবহন ব্যবহার করতে হবে তা নির্দিষ্ট করে। সঠিক ভ্যালু নিচে ভ্রমণের মোড বিকল্পে উল্লেখ করা আছে।
  • transitOptions (ঐচ্ছিক) সেইসব ভ্যালু নির্দিষ্ট করে যা শুধুমাত্র সেইসব অনুরোধের ক্ষেত্রে প্রযোজ্য যেখানে travelMode হল TRANSIT। সঠিক ভ্যালু নিচে ট্রানজিট বিকল্প-এ বর্ণনা করা হয়েছে।
  • drivingOptions (ঐচ্ছিক) সেইসব ভ্যালু নির্দিষ্ট করে যা শুধুমাত্র সেইসব অনুরোধের ক্ষেত্রে প্রযোজ্য যেখানে travelMode হল DRIVING। সঠিক ভ্যালু সম্পর্কে নিচে ড্রাইভিং বিকল্প-এ বর্ণনা করা হয়েছে।
  • unitSystem (ঐচ্ছিক) ফলাফল দেখানোর সময় কোন ইউনিট সিস্টেম ব্যবহার করা হবে তা নির্দিষ্ট করে। সঠিক ভ্যালু নিচে ইউনিট সিস্টেম-এ উল্লেখ করা আছে।

  • waypoints[] (ঐচ্ছিক) DirectionsWaypoint-এর অ্যারে নির্দিষ্ট করে। ওয়েপয়েন্ট নির্দিষ্ট লোকেশনের মাধ্যমে রুট করে কোনও রুট পরিবর্তন করে। ওয়েপয়েন্টকে অবজেক্ট লিটারাল হিসেবে নির্দিষ্ট করা হয়, যার ফিল্ড নিচে দেখানো হল:

    • location ওয়েপয়েন্টের লোকেশন নির্দিষ্ট করে, LatLng হিসেবে, Place অবজেক্ট হিসেবে অথবা String হিসেবে যা জিওকোড করা হবে।
    • stopover হল একটি বুলিয়ান যা নির্দেশ করে যে ওয়েপয়েন্ট হল রুটের একটি স্টপ, যার ফলে রুটটি দুটি রুটে বিভক্ত হয়ে যায়।

    (ওয়েপয়েন্ট সম্পর্কে আরও তথ্যের জন্য, নিচে রুটে ওয়েপয়েন্ট ব্যবহার করা দেখুন।)

  • optimizeWaypoints (ঐচ্ছিক) নির্দিষ্ট করে যে প্রদান করা waypoints ব্যবহার করে রুটটি আরও দক্ষ ক্রমে ওয়েপয়েন্টগুলি পুনর্বিন্যাস করে অপ্টিমাইজ করা যেতে পারে। true হলে, দিকনির্দেশ পরিষেবা waypoint_order ফিল্ডে পুনর্বিন্যাস করা waypoints ফেরত দেবে।(আরও তথ্যের জন্য, নিচে রুটে ওয়েপয়েন্ট ব্যবহার করা দেখুন।)
  • true-এ সেট করা থাকলে, provideRouteAlternatives (ঐচ্ছিক) নির্দিষ্ট করে যে, দিকনির্দেশ পরিষেবা উত্তরে একাধিক বিকল্প রুট প্রদান করতে পারে। মনে রাখবেন যে বিকল্প রুট প্রদান করলে সার্ভার থেকে উত্তর পেতে বেশি সময় লাগতে পারে। এটি শুধুমাত্র মধ্যবর্তী ওয়েপয়েন্ট ছাড়া অনুরোধের জন্য উপলভ্য।
  • avoidFerries (ঐচ্ছিক) যখন true-এ সেট করা হয়, তখন এটি নির্দেশ করে যে গণনা করা রুটে সম্ভব হলে ফেরি এড়িয়ে যেতে হবে।
  • avoidHighways (ঐচ্ছিক) যখন true-এ সেট করা হয়, তখন এটি ইঙ্গিত করে যে গণনা করা রুট(গুলি) সম্ভব হলে প্রধান হাইওয়ে এড়িয়ে যাবে।
  • avoidTolls (ঐচ্ছিক) যখন true-এ সেট করা হয়, তখন এটি ইঙ্গিত করে যে গণনা করা রুট(গুলি) সম্ভব হলে টোল রাস্তা এড়িয়ে যাবে।
  • region (ঐচ্ছিক) অঞ্চল কোড নির্দিষ্ট করে, যা ccTLD ("টপ-লেভেল ডোমেন") দুই-অক্ষরের মান হিসেবে নির্দিষ্ট করা হয়। (আরও তথ্যের জন্য নিচে অঞ্চল বায়াসিং দেখুন।)

নিচে একটি স্যাম্পেল DirectionsRequest দেওয়া হল:

{
  origin: 'Chicago, IL',
  destination: 'Los Angeles, CA',
  waypoints: [
    {
      location: 'Joplin, MO',
      stopover: false
    },{
      location: 'Oklahoma City, OK',
      stopover: true
    }],
  provideRouteAlternatives: false,
  travelMode: 'DRIVING',
  drivingOptions: {
    departureTime: new Date(/* now, or future date */),
    trafficModel: 'pessimistic'
  },
  unitSystem: google.maps.UnitSystem.IMPERIAL
}

ভ্রমণ মোড

দিকনির্দেশ গণনা করার সময়, আপনাকে পরিবহনের কোন মোড ব্যবহার করতে হবে তা উল্লেখ করতে হবে। বর্তমানে নিম্নলিখিত ভ্রমণ মোড কাজ করে:

  • DRIVING (ডিফল্ট) রোড নেটওয়ার্ক ব্যবহার করে স্ট্যান্ডার্ড গাড়ি চালানোর দিকনির্দেশ দেখায়।
  • BICYCLING সাইকেল চালানোর রাস্তা ও পছন্দের রাস্তা দিয়ে সাইকেল চালানোর দিকনির্দেশ পেতে অনুরোধ করেছেন।
  • TRANSIT পাবলিক ট্রানজিট রুটের মাধ্যমে দিকনির্দেশের অনুরোধ করে।
  • WALKING পথচারীদের রাস্তা ও ফুটপাথ দিয়ে হাঁটার দিকনির্দেশ চায়।

কোনও দেশ কতটা পর্যন্ত দিকনির্দেশ সংক্রান্ত তথ্য প্রদান করে তা নির্ধারণ করতে, Google Maps Platform কভারেজের বিবরণ দেখুন। আপনি যদি এমন কোনও অঞ্চলের জন্য দিকনির্দেশ অনুরোধ করেন যেখানে সেই ধরনের দিকনির্দেশ উপলভ্য নেই, তাহলে উত্তরে DirectionsStatus="ZERO_RESULTS" দেখানো হবে।

মনে রাখবেন: হাঁটার দিকনির্দেশে পথচারীদের জন্য স্পষ্ট পথ নাও থাকতে পারে, তাই হাঁটার দিকনির্দেশ DirectionsResult-এ সতর্কতা দেখাবে। এইসব সতর্কতা সবসময় ব্যবহারকারীকে দেখাতে হবে। আপনি ডিফল্ট DirectionsRenderer ব্যবহার না করলে, সতর্কতা দেখানো হচ্ছে কিনা তা নিশ্চিত করার দায়িত্ব আপনার।

ট্রানজিট বিকল্প

দিকনির্দেশের অনুরোধের জন্য উপলভ্য বিকল্পগুলি বিভিন্ন ভ্রমণ মোডের মধ্যে আলাদা হয়। ট্রানজিটের দিকনির্দেশের জন্য অনুরোধ করার সময়, avoidHighways, avoidTolls, waypoints[] এবং optimizeWaypoints বিকল্প উপেক্ষা করা হবে। আপনি TransitOptions অবজেক্ট লিটারালের মাধ্যমে ট্রানজিট নির্দিষ্ট রাউটিং বিকল্প উল্লেখ করতে পারেন।

ট্রানজিটের দিকনির্দেশ সময়-সংবেদনশীল। শুধুমাত্র ভবিষ্যতের সময়ের জন্য দিকনির্দেশ দেখানো হবে।

TransitOptions অবজেক্ট লিটারাল-এ নিম্নলিখিত ফিল্ডগুলি থাকে:

{
  arrivalTime: Date,
  departureTime: Date,
  modes[]: TransitMode,
  routingPreference: TransitRoutePreference
}

এইসব ফিল্ডের ব্যাপারে নিচে ব্যাখ্যা করা হয়েছে:

  • arrivalTime (ঐচ্ছিক) Date অবজেক্ট হিসেবে পৌঁছানোর বাঞ্ছিত সময় নির্দিষ্ট করে। পৌঁছানোর সময় উল্লেখ করা থাকলে, ছেড়ে যাওয়ার সময় উপেক্ষা করা হয়।
  • departureTime (ঐচ্ছিক) Date অবজেক্ট হিসেবে ছাড়ার কাঙ্ক্ষিত সময় নির্দিষ্ট করে। arrivalTime উল্লেখ করা থাকলে, departureTime এড়িয়ে যাওয়া হবে। departureTime বা arrivalTime-এর জন্য কোনও ভ্যালু নির্দিষ্ট করা না থাকলে, ডিফল্ট হিসেবে এখনকার (অর্থাৎ, বর্তমান সময়) সময় সেট করা হয়।
  • modes[] (ঐচ্ছিক) হল একটি অ্যারে যাতে এক বা একাধিক TransitMode অবজেক্ট লিটারাল থাকে। অনুরোধে API কী অন্তর্ভুক্ত থাকলে, শুধুমাত্র এই ফিল্ড অন্তর্ভুক্ত করা যেতে পারে। প্রতিটি TransitMode ট্রানজিটের একটি পছন্দের মোড নির্দিষ্ট করে। নিম্নলিখিত ভ্যালু অনুমোদিত:
    • BUS থেকে বোঝা যায় যে গণনা করা রুটে বাসে করে ভ্রমণ করাকে অগ্রাধিকার দেওয়া উচিত।
    • RAIL থেকে বোঝা যায় যে গণনা করা রুটে ট্রেন, ট্রাম, লাইট রেল ও সাবওয়েতে ভ্রমণকে অগ্রাধিকার দেওয়া উচিত।
    • SUBWAY থেকে বোঝা যায় যে গণনা করা রুটে সাবওয়েতে ভ্রমণকে অগ্রাধিকার দেওয়া উচিত।
    • TRAIN থেকে বোঝা যায় যে হিসাব করা রুটে ট্রেনে ভ্রমণ করাকে অগ্রাধিকার দেওয়া উচিত।
    • TRAM থেকে বোঝা যায় যে গণনা করা রুটে ট্রাম ও লাইট রেলের মাধ্যমে ভ্রমণকে অগ্রাধিকার দেওয়া উচিত।
  • routingPreference (ঐচ্ছিক) ট্রানজিট রুটের জন্য পছন্দ নির্দিষ্ট করে। এই বিকল্প ব্যবহার করে, আপনি API-এর বেছে নেওয়া ডিফল্ট সেরা রুট গ্রহণ করার পরিবর্তে, ফেরত আসা বিকল্পগুলিকে প্রভাবিত করতে পারবেন। অনুরোধে API কী অন্তর্ভুক্ত থাকলে তবেই এই ফিল্ড নির্দিষ্ট করা যেতে পারে। নিম্নলিখিত ভ্যালু অনুমোদিত:
    • FEWER_TRANSFERS নির্দেশ করে যে গণনা করা রুটে সীমিত সংখ্যক ট্রান্সফারকে অগ্রাধিকার দেওয়া উচিত।
    • LESS_WALKING নির্দেশ করে যে গণনা করা রুটে কম হাঁটার সুবিধা থাকা উচিত।

ট্রানজিট অনুযায়ী একটি স্যাম্পেল DirectionsRequest নিচে দেখানো হয়েছে:

{
  origin: 'Hoboken NJ',
  destination: 'Carroll Gardens, Brooklyn',
  travelMode: 'TRANSIT',
  transitOptions: {
    departureTime: new Date(1337675679473),
    modes: ['BUS'],
    routingPreference: 'FEWER_TRANSFERS'
  },
  unitSystem: google.maps.UnitSystem.IMPERIAL
}

ড্রাইভিং বিকল্প

আপনি DrivingOptions অবজেক্টের মাধ্যমে গাড়ি চালানোর দিকনির্দেশের জন্য রাউটিং বিকল্প নির্দিষ্ট করতে পারবেন।

DrivingOptions অবজেক্টে নিম্নলিখিত ফিল্ডগুলি থাকে:

{
  departureTime: Date,
  trafficModel: TrafficModel
}

এইসব ফিল্ডের ব্যাপারে নিচে ব্যাখ্যা করা হয়েছে:

  • departureTime (drivingOptions অবজেক্ট লিটারাল সঠিক হওয়ার জন্য প্রয়োজন) Date অবজেক্ট হিসেবে ছাড়ার বাঞ্ছিত সময় নির্দিষ্ট করে। ভ্যালু অবশ্যই বর্তমান সময় বা ভবিষ্যতের কোনও সময়ে সেট করতে হবে। এটি অতীতে হতে পারে না। (বিভিন্ন টাইম জোনে সামঞ্জস্যপূর্ণভাবে ম্যানেজ করার জন্য API সব তারিখকে UTC-তে কনভার্ট করে।) Google Maps Platform Premium Plan গ্রাহকদের জন্য, আপনি অনুরোধে departureTime অন্তর্ভুক্ত করলে, API সেই সময়ে প্রত্যাশিত ট্রাফিক পরিস্থিতি অনুযায়ী সেরা রুট দেখায় এবং উত্তরে ট্রাফিকের মধ্যে আনুমানিক সময় (duration_in_traffic) অন্তর্ভুক্ত করে। আপনি যদি রওনা হওয়ার সময় উল্লেখ না করেন (অর্থাৎ, অনুরোধে drivingOptions অন্তর্ভুক্ত না থাকলে), তাহলে ট্রাফিক পরিস্থিতি বিবেচনা না করেই সাধারণত ভাল রুট দেখানো হয়।
  • trafficModel (ঐচ্ছিক) ট্রাফিকের মধ্যে সময় গণনা করার সময় ব্যবহার করার জন্য অনুমান নির্দিষ্ট করে। এই সেটিং duration_in_traffic ফিল্ডে ফেরত আসা ভ্যালুকে প্রভাবিত করে, যার মধ্যে পুরনো গড় ডেটার উপর ভিত্তি করে ট্রাফিকের মধ্যে আনুমানিক সময় থাকে। ডিফল্ট হিসেবে bestguess সেট করা থাকে। নিম্নলিখিত ভ্যালু অনুমোদিত:
    • bestguess (ডিফল্ট) থেকে বোঝা যায় যে, duration_in_traffic-এর মাধ্যমে ভ্রমণের সময় সম্পর্কে সবচেয়ে ভালো অনুমান করা যাবে, কারণ এটি পুরনো ট্রাফিক পরিস্থিতি ও লাইভ ট্রাফিক, উভয় সম্পর্কেই তথ্য প্রদান করে। departureTime-এর সময় যত এগিয়ে আসে, লাইভ ট্রাফিক তত বেশি গুরুত্বপূর্ণ হয়ে ওঠে।
    • pessimistic থেকে বোঝা যায় যে, বেশিরভাগ দিনেই duration_in_traffic-এর মান প্রকৃত ভ্রমণের সময়ের চেয়ে বেশি হওয়া উচিত, যদিও মাঝে মাঝে বিশেষ করে খারাপ ট্রাফিক পরিস্থিতির দিনে এই মান অতিক্রম করতে পারে।
    • optimistic থেকে বোঝা যায় যে, বেশিরভাগ দিনেই duration_in_traffic-এর ভ্যালু প্রকৃত ভ্রমণের সময়ের চেয়ে কম হওয়া উচিত, যদিও মাঝে মাঝে ট্রাফিক পরিস্থিতি খুব ভালো থাকলে এই ভ্যালুর চেয়েও কম সময় লাগতে পারে।

গাড়ি চালানোর দিকনির্দেশের জন্য নিচে একটি স্যাম্পেল DirectionsRequest দেওয়া হল:

{
  origin: 'Chicago, IL',
  destination: 'Los Angeles, CA',
  travelMode: 'DRIVING',
  drivingOptions: {
    departureTime: new Date(Date.now() + N),  // for the time N milliseconds from now.
    trafficModel: 'optimistic'
  }
}

ইউনিট সিস্টেম

ডিফল্ট হিসেবে, উৎস দেশ বা অঞ্চলের ইউনিট সিস্টেম ব্যবহার করে দিকনির্দেশ হিসেব করা ও দেখানো হয়। (মনে রাখবেন: ঠিকানার পরিবর্তে অক্ষাংশ/দ্রাঘিমাংশ স্থানাঙ্ক ব্যবহার করে প্রকাশ করা উৎস সবসময় ডিফল্ট হিসেবে মেট্রিক ইউনিটে দেখানো হয়।) যেমন, "শিকাগো, ইলিনয়" থেকে "টরন্টো, অন্টারিও" পর্যন্ত রুটের ফলাফল মাইলে দেখানো হবে, কিন্তু উল্টো রুটের ফলাফল কিলোমিটারে দেখানো হবে। আপনি অনুরোধের মধ্যে স্পষ্টভাবে একটি সেট করে এই ইউনিট সিস্টেম ওভাররাইড করতে পারেন নিম্নলিখিত UnitSystem ভ্যালুগুলির মধ্যে একটি ব্যবহার করে:

  • UnitSystem.METRIC মেট্রিক সিস্টেমের ব্যবহার নির্দিষ্ট করে। দূরত্ব কিলোমিটারে দেখানো হয়।
  • UnitSystem.IMPERIAL ইম্পেরিয়াল (ইংরেজি) সিস্টেমের ব্যবহার নির্দিষ্ট করে। দূরত্ব মাইলে দেখানো হয়েছে।

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

দিকনির্দেশের জন্য অঞ্চল বায়াসিং

Google Maps API Directions Service, আপনি যে ডোমেন (অঞ্চল বা দেশ) থেকে JavaScript বুটস্ট্র্যাপ লোড করেছেন তার দ্বারা প্রভাবিত ঠিকানার ফলাফল দেখায়। (যেহেতু বেশিরভাগ ব্যবহারকারী https://maps.googleapis.com/ লোড করেন এটি মার্কিন যুক্তরাষ্ট্রের জন্য একটি অন্তর্নিহিত ডোমেন সেট করে।) আপনি যদি অন্য কোনও কাজ করে এমন ডোমেন থেকে বুটস্ট্র্যাপ লোড করেন, তাহলে আপনি সেই ডোমেন দ্বারা প্রভাবিত ফলাফল পাবেন। যেমন, "San Francisco" সার্চ করলে, https://maps.googleapis.com/ (মার্কিন যুক্তরাষ্ট্র) লোড করা অ্যাপ্লিকেশন থেকে http://maps.google.es/ (স্পেন) লোড করা অ্যাপ্লিকেশনের থেকে আলাদা ফলাফল দেখাতে পারে।

এছাড়াও, আপনি region প্যারামিটার ব্যবহার করে নির্দিষ্ট অঞ্চলের জন্য পক্ষপাতদুষ্ট ফলাফল দেখানোর জন্য দিকনির্দেশ পরিষেবা সেট করতে পারেন। এই প্যারামিটার একটি অঞ্চল কোড নেয়, যা দুই-অক্ষরের (নন-নিউমেরিক) ইউনিকোড অঞ্চল সাবট্যাগ হিসেবে নির্দিষ্ট করা হয়। বেশিরভাগ ক্ষেত্রে, এই ট্যাগগুলি সরাসরি ccTLD ("টপ-লেভেল ডোমেন") দুই-অক্ষরের মান যেমন "co.uk"-এ "uk" ম্যাপ করে। কিছু ক্ষেত্রে, region ট্যাগে ISO-3166-1 কোডও কাজ করে, যা কখনও কখনও ccTLD ভ্যালুর থেকে আলাদা হয় (যেমন, "Great Britain"-এর জন্য "GB")।

region প্যারামিটার ব্যবহার করার সময়:

  • শুধুমাত্র একটি দেশ বা অঞ্চল উল্লেখ করুন। একাধিক মান উপেক্ষা করা হয়েছে এবং এর ফলে অনুরোধ বাতিল হতে পারে।
  • শুধুমাত্র দুই-অক্ষরের অঞ্চল সাবট্যাগ (Unicode CLDR ফর্ম্যাট) ব্যবহার করুন। অন্যান্য সব ইনপুটের ক্ষেত্রে সমস্যা হবে।

যেসব দেশ ও অঞ্চলে দিকনির্দেশ কাজ করে, শুধুমাত্র সেখানেই অঞ্চল বায়াসিং কাজ করে। Directions API (Legacy)-এর জন্য আন্তর্জাতিক কভারেজ দেখতে Google Maps Platform কভারেজের বিবরণ দেখুন।

দিকনির্দেশ রেন্ডার করা হচ্ছে

route() পদ্ধতি ব্যবহার করে DirectionsService-এ দিকনির্দেশ সংক্রান্ত অনুরোধ শুরু করার জন্য একটি কলব্যাক পাস করতে হবে যা পরিষেবার অনুরোধ সম্পূর্ণ হওয়ার পরে চালু হয়। এই কলব্যাক, উত্তরে একটি DirectionsResult এবং একটি DirectionsStatus কোড রিটার্ন করবে।

দিকনির্দেশ সংক্রান্ত কোয়েরির স্ট্যাটাস

DirectionsStatus নিম্নলিখিত ভ্যালু দেখাতে পারে:

  • OK নির্দেশ করে যে উত্তরে একটি সঠিক DirectionsResult আছে।
  • NOT_FOUND থেকে বোঝা যায় যে অনুরোধের উৎস, গন্তব্য বা ওয়েপয়েন্টে উল্লেখ করা লোকেশনগুলির মধ্যে অন্তত একটি জিওকোড করা যায়নি।
  • ZERO_RESULTS-এর অর্থ হল, যাত্রা শুরুর স্থান ও গন্তব্যের মধ্যে কোনও রুট খুঁজে পাওয়া যায়নি।
  • MAX_WAYPOINTS_EXCEEDED থেকে বোঝা যায় যে DirectionsRequest-এ অনেক বেশি DirectionsWaypoint ফিল্ড দেওয়া হয়েছে। ওয়ে পয়েন্টের সীমা সম্পর্কে জানতে নিচের বিভাগটি দেখুন।
  • MAX_ROUTE_LENGTH_EXCEEDED-এর অর্থ হল অনুরোধ করা রুটটি অনেক দীর্ঘ এবং প্রসেস করা যাবে না। আরও জটিল দিকনির্দেশ ফেরত পাঠানো হলে এই সমস্যা হয়। ওয়েপয়েন্ট, বাঁক বা নির্দেশের সংখ্যা কমিয়ে দেখুন।
  • INVALID_REQUEST থেকে বোঝা যায় যে প্রদান করা DirectionsRequest সঠিক নয়। এই ত্রুটি কোডের সবচেয়ে সাধারণ কারণ হল এমন অনুরোধ যাতে উৎস বা গন্তব্য উল্লেখ করা নেই অথবা ট্রানজিট অনুরোধ যাতে ওয়েপয়েন্ট অন্তর্ভুক্ত আছে।
  • OVER_QUERY_LIMIT থেকে বোঝা যায় যে অনুমোদিত সময়সীমার মধ্যে ওয়েবপেজটি অনেক বেশি অনুরোধ পাঠিয়েছে।
  • REQUEST_DENIED নির্দেশ করে যে ওয়েবপেজকে দিকনির্দেশ পরিষেবা ব্যবহার করার অনুমতি দেওয়া হয়নি।
  • UNKNOWN_ERROR-এর অর্থ হল সার্ভারে সমস্যার কারণে দিকনির্দেশ সংক্রান্ত অনুরোধ প্রসেস করা যায়নি। আপনি আবার চেষ্টা করলে অনুরোধটি সফল হতে পারে।

ফলাফল প্রসেস করার আগে এই ভ্যালু চেক করে আপনাকে নিশ্চিত করতে হবে যে দিকনির্দেশ কোয়েরি সঠিক ফলাফল দেখিয়েছে।

DirectionsResult দেখানো হচ্ছে

DirectionsResult-এ দিকনির্দেশ কোয়েরির ফলাফল থাকে, যা আপনি নিজে ম্যানেজ করতে পারেন অথবা DirectionsRenderer অবজেক্টে পাঠাতে পারেন, যা ম্যাপে ফলাফল দেখানোর বিষয়টি অটোমেটিক ম্যানেজ করতে পারে।

DirectionsRenderer ব্যবহার করে DirectionsResult দেখাতে, আপনাকে নিম্নলিখিত কাজগুলি করতে হবে:

  1. DirectionsRenderer অবজেক্ট তৈরি করুন।
  2. পাস করা ম্যাপে বাইন্ড করতে রেন্ডারারে setMap() কল করুন।
  3. রেন্ডারারে setDirections() কল করুন, উপরে উল্লেখ করা DirectionsResult এতে পাস করুন। রেন্ডারার একটি MVCObject হওয়ার কারণে, এটি অটোমেটিক এর প্রপার্টিতে হওয়া যেকোনও পরিবর্তন শনাক্ত করবে এবং এর সাথে যুক্ত দিকনির্দেশ পরিবর্তন হলে ম্যাপ আপডেট করবে।

নিম্নলিখিত উদাহরণটি রুট ৬৬-এর দুটি লোকেশনের মধ্যে দিকনির্দেশ গণনা করে, যেখানে ড্রপডাউন তালিকায় দেওয়া "start" এবং "end" ভ্যালু দ্বারা উৎস এবং গন্তব্য সেট করা হয়। DirectionsRenderer নির্দেশিত লোকেশনের মধ্যে পলিলাইন দেখায় এবং প্রযোজ্য হলে, শুরু, গন্তব্য ও যেকোনও ওয়েপয়েন্টে মার্কার প্লেস করে।

function initMap() {
  var directionsService = new google.maps.DirectionsService();
  var directionsRenderer = new google.maps.DirectionsRenderer();
  var chicago = new google.maps.LatLng(41.850033, -87.6500523);
  var mapOptions = {
    zoom:7,
    center: chicago
  }
  var map = new google.maps.Map(document.getElementById('map'), mapOptions);
  directionsRenderer.setMap(map);
}

function calcRoute() {
  var start = document.getElementById('start').value;
  var end = document.getElementById('end').value;
  var request = {
    origin: start,
    destination: end,
    travelMode: 'DRIVING'
  };
  directionsService.route(request, function(result, status) {
    if (status == 'OK') {
      directionsRenderer.setDirections(result);
    }
  });
}

HTML বডিতে:

<div>
<strong>Start: </strong>
<select id="start" onchange="calcRoute();">
  <option value="chicago, il">Chicago</option>
  <option value="st louis, mo">St Louis</option>
  <option value="joplin, mo">Joplin, MO</option>
  <option value="oklahoma city, ok">Oklahoma City</option>
  <option value="amarillo, tx">Amarillo</option>
  <option value="gallup, nm">Gallup, NM</option>
  <option value="flagstaff, az">Flagstaff, AZ</option>
  <option value="winona, az">Winona</option>
  <option value="kingman, az">Kingman</option>
  <option value="barstow, ca">Barstow</option>
  <option value="san bernardino, ca">San Bernardino</option>
  <option value="los angeles, ca">Los Angeles</option>
</select>
<strong>End: </strong>
<select id="end" onchange="calcRoute();">
  <option value="chicago, il">Chicago</option>
  <option value="st louis, mo">St Louis</option>
  <option value="joplin, mo">Joplin, MO</option>
  <option value="oklahoma city, ok">Oklahoma City</option>
  <option value="amarillo, tx">Amarillo</option>
  <option value="gallup, nm">Gallup, NM</option>
  <option value="flagstaff, az">Flagstaff, AZ</option>
  <option value="winona, az">Winona</option>
  <option value="kingman, az">Kingman</option>
  <option value="barstow, ca">Barstow</option>
  <option value="san bernardino, ca">San Bernardino</option>
  <option value="los angeles, ca">Los Angeles</option>
</select>
</div>

উদাহরণ দেখুন

নিম্নলিখিত উদাহরণে ক্যালিফোর্নিয়ার সান ফ্রান্সিসকোর হাইট-অ্যাশবেরি থেকে ওশান বিচের মধ্যে ভ্রমণের বিভিন্ন মোড ব্যবহার করে দিকনির্দেশ দেখানো হয়েছে:

function initMap() {
  var directionsService = new google.maps.DirectionsService();
  var directionsRenderer = new google.maps.DirectionsRenderer();
  var haight = new google.maps.LatLng(37.7699298, -122.4469157);
  var oceanBeach = new google.maps.LatLng(37.7683909618184, -122.51089453697205);
  var mapOptions = {
    zoom: 14,
    center: haight
  }
  var map = new google.maps.Map(document.getElementById('map'), mapOptions);
  directionsRenderer.setMap(map);
}

function calcRoute() {
  var selectedMode = document.getElementById('mode').value;
  var request = {
      origin: haight,
      destination: oceanBeach,
      // Note that JavaScript allows us to access the constant
      // using square brackets and a string value as its
      // "property."
      travelMode: google.maps.TravelMode[selectedMode]
  };
  directionsService.route(request, function(response, status) {
    if (status == 'OK') {
      directionsRenderer.setDirections(response);
    }
  });
}

HTML বডিতে:

<div>
<strong>Mode of Travel: </strong>
<select id="mode" onchange="calcRoute();">
  <option value="DRIVING">Driving</option>
  <option value="WALKING">Walking</option>
  <option value="BICYCLING">Bicycling</option>
  <option value="TRANSIT">Transit</option>
</select>
</div>

উদাহরণ দেখুন

DirectionsRenderer শুধু পলিলাইন ও সংশ্লিষ্ট মার্কার দেখানোর কাজই করে না, বরং দিকনির্দেশ সংক্রান্ত টেক্সটও ধাপে ধাপে দেখায়। এটি করতে, আপনার DirectionsRenderer-এ setPanel() কল করুন, যেখানে এই তথ্য দেখানো হবে সেখানে <div> পাস করুন। এটি করলে, আপনি যে সঠিক কপিরাইট সংক্রান্ত তথ্য এবং ফলাফলের সাথে সম্পর্কিত কোনও সতর্কতা দেখাচ্ছেন তা নিশ্চিত করা যায়।

ব্রাউজারের পছন্দের ভাষা সেটিং বা language প্যারামিটার ব্যবহার করে API জাভাস্ক্রিপ্ট লোড করার সময় নির্দিষ্ট করা ভাষা ব্যবহার করে টেক্সট হিসেবে দিকনির্দেশ প্রদান করা হবে। (আরও তথ্যের জন্য, লোকালাইজেশন দেখুন।) ট্রানজিটের দিকনির্দেশের ক্ষেত্রে, সেই ট্রানজিট স্টপের টাইম জোনে সময় দেখানো হবে।

নিচের উদাহরণটি উপরে দেখানো উদাহরণের মতোই, তবে এতে একটি <div> প্যানেল অন্তর্ভুক্ত রয়েছে যেখানে দিকনির্দেশ দেখানো হবে:

function initMap() {
  var directionsService = new google.maps.DirectionsService();
  var directionsRenderer = new google.maps.DirectionsRenderer();
  var chicago = new google.maps.LatLng(41.850033, -87.6500523);
  var mapOptions = {
    zoom:7,
    center: chicago
  }
  var map = new google.maps.Map(document.getElementById('map'), mapOptions);
  directionsRenderer.setMap(map);
  directionsRenderer.setPanel(document.getElementById('directionsPanel'));
}

function calcRoute() {
  var start = document.getElementById('start').value;
  var end = document.getElementById('end').value;
  var request = {
    origin:start,
    destination:end,
    travelMode: 'DRIVING'
  };
  directionsService.route(request, function(response, status) {
    if (status == 'OK') {
      directionsRenderer.setDirections(response);
    }
  });
}

HTML বডিতে:

<div id="map" style="float:left;width:70%;height:100%"></div>
<div id="directionsPanel" style="float:right;width:30%;height:100%"></div>

উদাহরণ দেখুন

DirectionsResult অবজেক্ট

DirectionsService-এ দিকনির্দেশ সংক্রান্ত অনুরোধ পাঠানোর সময়, আপনি স্ট্যাটাস কোড ও ফলাফল সহ একটি উত্তর পাবেন, যা হল DirectionsResult অবজেক্ট। DirectionsResult হল একটি অবজেক্ট লিটারাল যার মধ্যে নিম্নলিখিত ফিল্ডগুলি আছে:

  • geocoded_waypoints[]-এ DirectionsGeocodedWaypoint অবজেক্টের একটি অ্যারে থাকে, যার প্রত্যেকটিতে উৎস, গন্তব্য ও ওয়েপয়েন্টের জিওকোডিং সম্পর্কে বিবরণ থাকে।
  • routes[]-এ DirectionsRoute অবজেক্টের অ্যারে রয়েছে। প্রতিটি রুট, DirectionsRequest-এ উল্লেখ করা শুরুর স্থান থেকে গন্তব্যে পৌঁছানোর একটি উপায় নির্দেশ করে। সাধারণত, কোনও অনুরোধের জন্য শুধুমাত্র একটি রুট দেখানো হয়, যদি না অনুরোধের provideRouteAlternatives ফিল্ড true-এ সেট করা থাকে, যেক্ষেত্রে একাধিক রুট দেখানো হতে পারে।

মনে রাখবেন: বিকল্প রুটে via_waypoint প্রপার্টি বন্ধ করা হয়েছে। API-এর শেষ ভার্সন হল ৩.২৭, যা বিকল্প রুটে অতিরিক্ত ভায়া ওয়েপয়েন্ট যোগ করে। API-এর ৩.২৮ এবং তার পরবর্তী ভার্সনের জন্য, আপনি বিকল্প রুটের ড্র্যাগিং বন্ধ করে Directions পরিষেবা ব্যবহার করে ড্র্যাগেবল দিকনির্দেশ প্রয়োগ করা চালিয়ে যেতে পারেন। শুধুমাত্র প্রধান রুট ড্র্যাগ করা যাবে। ব্যবহারকারীরা প্রধান রুটটি টেনে নিয়ে গিয়ে বিকল্প রুটের সাথে ম্যাচ করাতে পারেন।

দিকনির্দেশ জিওকোড করা ওয়েপয়েন্ট

DirectionsGeocodedWaypoint-এ উৎস, গন্তব্য ও ওয়েপয়েন্টের জিওকোডিং সংক্রান্ত বিবরণ থাকে।

DirectionsGeocodedWaypoint হল অবজেক্ট লিটারাল, এতে নিম্নলিখিত ফিল্ড থাকে:

  • geocoder_status জিওকোডিং অপারেশনের ফলে পাওয়া স্ট্যাটাস কোড দেখায়। এই ফিল্ডে নিম্নলিখিত ভ্যালু থাকতে পারে।
    • "OK"-এর অর্থ হল কোনও সমস্যা হয়নি; ঠিকানাটি সফলভাবে পার্স করা হয়েছে এবং অন্তত একটি জিওকোড পাওয়া গেছে।
    • "ZERO_RESULTS"-এর অর্থ হল জিওকোড সফল হয়েছে কিন্তু কোনও ফলাফল পাওয়া যায়নি। জিওকোডার যদি এমন কোনও address পাস করে যা বাস্তবে নেই, তাহলে এটি হতে পারে।
  • partial_match থেকে বোঝা যায় যে জিওকোডার আসল অনুরোধের জন্য সম্পূর্ণ মিল খুঁজে পায়নি, যদিও এটি অনুরোধ করা ঠিকানার কিছু অংশ মেলাতে পেরেছে। আপনি হয়ত আসল অনুরোধে বানান ভুল এবং/অথবা অসম্পূর্ণ ঠিকানা আছে কিনা তা পরীক্ষা করতে চাইবেন।

    অনুরোধে উল্লেখ করা এলাকার মধ্যে রাস্তার ঠিকানা না থাকলে, আংশিক মিলের ঘটনা প্রায়শই ঘটে। কোনও অনুরোধ একই এলাকার দুই বা তার বেশি লোকেশনের সাথে মিলে গেলে, আংশিক মিলও দেখানো হতে পারে। যেমন, "Hillpar St, Bristol, UK" লিখলে, Henry Street এবং Henrietta Street, দুটির জন্যই আংশিক মিল দেখাবে। মনে রাখবেন, কোনও অনুরোধে যদি ভুল বানান সহ কোনও ঠিকানা থাকে, তাহলে জিওকোডিং পরিষেবা বিকল্প ঠিকানা সাজেস্ট করতে পারে। এইভাবে ট্রিগার করা সাজেশনও আংশিক ম্যাচ হিসেবে চিহ্নিত করা হবে।

  • place_idহল কোনও জায়গার অনন্য শনাক্তকারী, যা অন্যান্য Google API-এর সাথে ব্যবহার করা যেতে পারে। যেমন, আপনি place_id Google Places API লাইব্রেরির সাথে ব্যবহার করে স্থানীয় ব্যবসার বিবরণ পেতে পারেন, যেমন ফোন নম্বর, খোলা থাকার সময়, ব্যবহারকারীর রিভিউ এবং আরও অনেক কিছু। প্লেস আইডি ওভারভিউ দেখুন।
  • types[] হল একটি অ্যারে যা রিটার্ন করা ফলাফলের ধরন নির্দেশ করে। এই অ্যারেতে শূন্য বা তার বেশি ট্যাগের সেট থাকে যা ফলাফলে দেখানো ফিচারের ধরন শনাক্ত করে। যেমন, "শিকাগো"র জিওকোড "লোকালিটি" রিটার্ন করে যা থেকে বোঝা যায় যে "শিকাগো" একটি শহর এবং "রাজনৈতিক" রিটার্ন করে যা থেকে বোঝা যায় যে এটি একটি রাজনৈতিক সত্তা।

দিকনির্দেশ রুট

মনে রাখবেন: পুরনো DirectionsTrip অবজেক্টের নাম পরিবর্তন করে DirectionsRoute করা হয়েছে। মনে রাখবেন যে, এখন রুট বলতে পুরো যাত্রা শুরু থেকে শেষ পর্যন্ত বোঝায়, প্যারেন্ট ট্রিপের কোনও একটি অংশ নয়।

DirectionsRoute-এ নির্দিষ্ট করা উৎস ও গন্তব্য থেকে একটি ফলাফল থাকে। এই রুটে এক বা একাধিক লেগ (DirectionsLeg ধরনের) থাকতে পারে যা কোনও ওয়েপয়েন্ট নির্দিষ্ট করা আছে কিনা তার উপর নির্ভর করে। এছাড়াও, রুটে কপিরাইট ও সতর্কতামূলক তথ্য থাকে যা রুটিং সংক্রান্ত তথ্যের সাথে ব্যবহারকারীকে দেখাতে হবে।

DirectionsRoute হল অবজেক্ট লিটারাল, এতে নিম্নলিখিত ফিল্ড থাকে:

  • legs[]-এ DirectionsLeg অবজেক্টের অ্যারে থাকে, যার প্রত্যেকটিতে প্রদত্ত রুটের মধ্যে দুটি লোকেশন থেকে রুটের একটি লেগ সম্পর্কে তথ্য থাকে। নির্দিষ্ট করা প্রতিটি ওয়েপয়েন্ট বা গন্তব্যের জন্য আলাদা লেগ দেখানো হবে। (কোনও ওয়েপয়েন্ট ছাড়া রুটে ঠিক একটি DirectionsLeg থাকবে।) প্রতিটি লেগ DirectionStep-এর সিরিজ নিয়ে গঠিত।
  • waypoint_order-এ একটি অ্যারে আছে যা গণনা করা রুটে যেকোনও ওয়েপয়েন্টের ক্রম নির্দেশ করে। DirectionsRequest optimizeWaypoints: true পাস করা হলে, এই অ্যারেতে পরিবর্তিত ক্রম থাকতে পারে।
  • overview_path-এ LatLng-এর একটি অ্যারে আছে যা ফলাফল হিসেবে পাওয়া দিকনির্দেশের আনুমানিক (স্মুথ করা) পাথ দেখায়।
  • overview_polyline-এ একটিই points অবজেক্ট থাকে যা রুটের এনকোড করা পলিলাইন রিপ্রেজেন্টেশন ধরে রাখে। এই পলিলাইন হল ফলাফল হিসেবে পাওয়া দিকনির্দেশের আনুমানিক (স্মুথ করা) পাথ।
  • bounds-এ LatLngBounds আছে যা এই প্রদত্ত রুট বরাবর পলিলাইনের সীমা নির্দেশ করে।
  • copyrights-এ এই রুটের জন্য দেখানোর মতো কপিরাইট সংক্রান্ত টেক্সট রয়েছে।
  • warnings[]-এ সতর্কতার একটি অ্যারে আছে যা এই দিকনির্দেশ দেখানোর সময় দেখানো হবে। আপনি যদি প্রদান করা DirectionsRenderer অবজেক্ট ব্যবহার না করেন, তাহলে আপনাকে নিজেই এইসব সতর্কতা ম্যানেজ করতে ও দেখাতে হবে।
  • fare-এ এই রুটের মোট ভাড়া (অর্থাৎ, টিকিটের মোট খরচ) উল্লেখ করা আছে। এই প্রপার্টি শুধুমাত্র ট্রানজিট অনুরোধের জন্য এবং শুধুমাত্র সেইসব রুটের জন্য ফেরত দেওয়া হয় যেখানে সমস্ত ট্রানজিট লেগের জন্য ভাড়ার তথ্য উপলভ্য। এই তথ্যের মধ্যে রয়েছে:
    • currency: একটি ISO 4217 মুদ্রার কোড যা নির্দেশ করে যে কোন মুদ্রায় পরিমাণটি প্রকাশ করা হয়েছে।
    • value: উপরে উল্লেখ করা মুদ্রায় মোট ভাড়ার পরিমাণ।

দিকনির্দেশ লেগ

মনে রাখবেন: পুরনো DirectionsRoute অবজেক্টের নাম পরিবর্তন করে DirectionsLeg করা হয়েছে।

DirectionsLeg-এর মাধ্যমে, গণনা করা রুটে, যাত্রা শুরু হওয়ার জায়গা থেকে গন্তব্য পর্যন্ত যাত্রার একটি অংশকে সংজ্ঞায়িত করা হয়। যেসব রুটে কোনও ওয়েপয়েন্ট নেই, সেইসব রুটে একটিই "লেগ" থাকবে, কিন্তু যেসব রুটে এক বা একাধিক ওয়েপয়েন্ট আছে, সেইসব রুটে এক বা একাধিক লেগ থাকবে, যা যাত্রার নির্দিষ্ট লেগের সাথে সম্পর্কিত।

DirectionsLeg হল একটি অবজেক্ট লিটারাল যাতে নিম্নলিখিত ফিল্ডগুলি থাকে:

  • steps[]-এ DirectionsStep অবজেক্টের অ্যারে থাকে যা যাত্রার প্রতিটি আলাদা ধাপের তথ্য দেখায়।
  • distance এই লেগের মাধ্যমে কভার করা মোট দূরত্ব Distance অবজেক্ট হিসেবে নিম্নলিখিত ফর্ম্যাটে দেখানো হয়:

    • value মিটারে দূরত্ব নির্দেশ করে
    • text-এ দূরত্বের স্ট্রিং উপস্থাপনা রয়েছে, যা ডিফল্ট হিসেবে উৎসে ব্যবহৃত ইউনিটে দেখানো হয়। (যেমন, মার্কিন যুক্তরাষ্ট্রের মধ্যে যেকোনও উৎস থেকে দূরত্ব দেখানোর জন্য মাইল ব্যবহার করা হবে।) আপনি আসল কোয়েরিতে নির্দিষ্টভাবে UnitSystem সেট করে এই ইউনিট সিস্টেম ওভাররাইড করতে পারেন। মনে রাখবেন, আপনি যে ইউনিট সিস্টেমই ব্যবহার করুন না কেন, distance.value ফিল্ডে সবসময় মিটারে প্রকাশ করা ভ্যালু থাকে।

    দূরত্ব জানা না থাকলে, এইসব ফিল্ড হয়ত সংজ্ঞায়িত করা যাবে না।

  • duration এই লেগের মোট সময়সীমা নির্দেশ করে, যা নিম্নলিখিত ফর্মের Duration অবজেক্ট হিসেবে দেখানো হয়:

    • value সেকেন্ডে সময়সীমা নির্দেশ করে।
    • text-এ সময়সীমার স্ট্রিং উপস্থাপনা রয়েছে।

    সময়কাল অজানা থাকলে, এইসব ফিল্ড হয়ত সংজ্ঞায়িত করা যাবে না।

  • duration_in_traffic বর্তমান ট্রাফিক পরিস্থিতি বিবেচনা করে এই লেগের মোট সময়কাল নির্দেশ করে। নিম্নলিখিত সবকটি শর্ত পূরণ হলে তবেই duration_in_traffic ফেরত পাঠানো হয়:

    • অনুরোধে স্টপওভার ওয়েপয়েন্ট অন্তর্ভুক্ত নেই। অর্থাৎ, এতে এমন কোনও ওয়েপয়েন্ট অন্তর্ভুক্ত নেই যেখানে stopover হল true।
    • অনুরোধটি বিশেষভাবে গাড়ি চালানোর দিকনির্দেশের জন্য— mode-এর মান driving-এ সেট করা আছে।
    • অনুরোধে drivingOptions ফিল্ডের অংশ হিসেবে departureTime অন্তর্ভুক্ত করা হয়েছে।
    • অনুরোধ করা রুটের জন্য ট্রাফিক শর্তাবলী উপলভ্য।

    duration_in_traffic-এ নিম্নলিখিত ফিল্ডগুলি রয়েছে:

    • value সেকেন্ডে সময়সীমা নির্দেশ করে।
    • text-এ সময়সীমার মানুষের-পঠনযোগ্য উপস্থাপনা রয়েছে।
  • arrival_time-এ এই ট্রানজিট লাইনের জন্য পৌঁছানোর আনুমানিক সময় রয়েছে। এই প্রপার্টি শুধুমাত্র ট্রানজিটের দিকনির্দেশের জন্য ফেরত দেওয়া হয়। ফলাফলটি তিনটি প্রপার্টি সহ Time অবজেক্ট হিসেবে রিটার্ন করা হয়:
    • value জাভাস্ক্রিপ্ট অবজেক্ট হিসেবে Date নির্দিষ্ট করা সময়।
    • text স্ট্রিং হিসেবে নির্দিষ্ট করা সময়। ট্রানজিট স্টপের টাইম জোনে সময় দেখানো হয়।
    • time_zone-এ এই স্টেশনের টাইম জোন রয়েছে। ভ্যালু হল টাইম জোনের নাম, যা IANA টাইম জোন ডেটাবেসে উল্লেখ করা আছে, যেমন "America/New_York"।
  • departure_time-এ এই লেগের জন্য আনুমানিক ছাড়ার সময় থাকে, যা Time অবজেক্ট হিসেবে নির্দিষ্ট করা হয়। departure_time শুধুমাত্র ট্রানজিটের দিকনির্দেশের জন্য উপলভ্য।
  • start_location-এ এই লেগের LatLng-এর অরিজিন আছে। Directions Web Service শুরু ও শেষ পয়েন্টে সবচেয়ে কাছের পরিবহনের বিকল্প (সাধারণত রাস্তা) ব্যবহার করে লোকেশনের মধ্যে দিকনির্দেশ গণনা করে, তাই start_location এই লেগের প্রদত্ত উৎস থেকে আলাদা হতে পারে, যেমন, উৎস থেকে রাস্তা কাছে না থাকলে।
  • end_location-এ এই লেগের গন্তব্যের LatLng আছে। যেহেতু DirectionsService শুরু ও শেষ পয়েন্টে সবচেয়ে কাছের পরিবহনের বিকল্প (সাধারণত রাস্তা) ব্যবহার করে লোকেশনগুলির মধ্যে দিকনির্দেশ গণনা করে, তাই end_location এই লেগের প্রদত্ত গন্তব্য থেকে আলাদা হতে পারে, যেমন, গন্তব্যের কাছাকাছি কোনও রাস্তা না থাকলে।
  • start_address-এ এই লেগের শুরুর মানুষের-পঠনযোগ্য ঠিকানা (সাধারণত রাস্তার ঠিকানা) থাকে।

    এই কন্টেন্ট যেমন আছে তেমনই পড়তে হবে। ফর্ম্যাট করা ঠিকানা প্রোগ্রাম্যাটিক্যালি পার্স করবেন না।
  • end_address-এ এই লেগের শেষ অংশের মানুষের-পঠনযোগ্য ঠিকানা (সাধারণত রাস্তার ঠিকানা) থাকে।

    এই কন্টেন্ট যেমন আছে তেমনই পড়তে হবে। ফর্ম্যাট করা ঠিকানা প্রোগ্রাম্যাটিক্যালি পার্স করবেন না।

দিকনির্দেশের ধাপ

DirectionsStep হল দিকনির্দেশের রুটের সবচেয়ে ছোট ইউনিট, যার মধ্যে একটি মাত্র ধাপ থাকে এবং সেটি যাত্রার একটি নির্দিষ্ট, একক নির্দেশ বর্ণনা করে। যেমন, "W-এ বাঁদিকে ঘুরুন। "৪র্থ স্ট্রিট" এই ধাপে শুধু নির্দেশই বর্ণনা করা হয় না, তার সাথে এই ধাপটি পরবর্তী ধাপের সাথে কীভাবে সম্পর্কিত সেই বিষয়ে দূরত্ব ও সময়কাল সম্পর্কিত তথ্যও থাকে। যেমন, "I-80 West-এ মার্জ করুন" হিসেবে উল্লেখ করা কোনও ধাপে "৩৭ মাইল" এবং "৪০ মিনিট" সময়সীমা থাকতে পারে, যা থেকে বোঝা যায় যে পরবর্তী ধাপটি এই ধাপ থেকে ৩৭ মাইল/৪০ মিনিট দূরে।

ট্রানজিটের দিকনির্দেশ খুঁজতে 'দিকনির্দেশ' পরিষেবা ব্যবহার করার সময়, স্টেপ অ্যারেতে transit অবজেক্টের আকারে অতিরিক্ত ট্রানজিট নির্দিষ্ট তথ্য অন্তর্ভুক্ত থাকবে। যদি দিকনির্দেশে একাধিক পরিবহনের মোড অন্তর্ভুক্ত থাকে, তাহলে steps[] অ্যারেতে হাঁটা বা গাড়ি চালানোর ধাপগুলির জন্য বিস্তারিত দিকনির্দেশ প্রদান করা হবে। যেমন, হাঁটার ধাপের মধ্যে শুরু ও শেষ লোকেশনের দিকনির্দেশ অন্তর্ভুক্ত থাকবে: "Innes Ave ও Fitch St পর্যন্ত হেঁটে যান"। সেই ধাপে steps[] অ্যারেতে সেই রুটের জন্য হাঁটার বিস্তারিত দিকনির্দেশ অন্তর্ভুক্ত থাকবে, যেমন: "উত্তর-পশ্চিম দিকে যান", "বাঁদিকে ঘুরে Arelious Walker-এ যান" এবং "বাঁদিকে ঘুরে Innes Ave-এ যান"।

DirectionsStep হল একটি অবজেক্ট লিটারাল যাতে নিম্নলিখিত ফিল্ডগুলি থাকে:

  • instructions-এ টেক্সট স্ট্রিংয়ের মধ্যে এই ধাপের জন্য নির্দেশাবলী রয়েছে।
  • distance-এ এই ধাপ থেকে পরবর্তী ধাপ পর্যন্ত অতিক্রম করা দূরত্ব, Distance অবজেক্ট হিসেবে থাকে। (উপরে DirectionsLeg-এ বিবরণ দেখুন।) দূরত্ব জানা না থাকলে এই ফিল্ডটি সংজ্ঞায়িত নাও হতে পারে।
  • duration-এ পরবর্তী ধাপ পর্যন্ত, ধাপটি সম্পূর্ণ করতে প্রয়োজনীয় সময়ের আনুমানিক হিসেব, Duration অবজেক্ট হিসেবে থাকে। (উপরে DirectionsLeg-এ বিবরণ দেখুন।) সময়সীমা অজানা থাকলে এই ফিল্ডটি হয়ত সংজ্ঞায়িত করা যাবে না।
  • start_location-এ এই ধাপের শুরুর পয়েন্টের জিওকোড করা LatLng আছে।
  • end_location-এ এই ধাপের শেষ বিন্দুর LatLng রয়েছে।
  • polyline-এ একটিই points অবজেক্ট থাকে যা স্টেপের এনকোড করা পলিলাইন রিপ্রেজেন্টেশন ধরে রাখে। এই পলিলাইন হল ধাপের আনুমানিক (স্মুথ করা) পাথ।
  • steps[] একটি DirectionsStep অবজেক্ট লিটারাল যাতে ট্রানজিট দিকনির্দেশে হাঁটা বা গাড়ি চালানোর ধাপগুলির জন্য বিস্তারিত দিকনির্দেশ রয়েছে। ট্রানজিটের দিকনির্দেশের জন্য শুধু সাব-স্টেপ উপলভ্য।
  • travel_mode-এ TravelMode আছে যা এই ধাপে ব্যবহার করা হয়েছে। ট্রানজিটের দিকনির্দেশে হাঁটা ও ট্রানজিটের দিকনির্দেশের কম্বিনেশন থাকতে পারে।
  • path-এ LatLngs-এর একটি অ্যারে আছে যা এই ধাপের কোর্স বর্ণনা করে।
  • transit-এ ট্রানজিট সংক্রান্ত নির্দিষ্ট তথ্য থাকে, যেমন পৌঁছানো ও ছাড়ার সময় এবং ট্রানজিট লাইনের নাম।

ট্রানজিট সংক্রান্ত নির্দিষ্ট তথ্য

ট্রানজিটের দিকনির্দেশ অতিরিক্ত তথ্য প্রদান করে যা অন্যান্য পরিবহনের মোডের জন্য প্রাসঙ্গিক নয়। এই অতিরিক্ত প্রপার্টিগুলি TransitDetails অবজেক্টের মাধ্যমে প্রকাশ করা হয়, যা DirectionsStep-এর প্রপার্টি হিসেবে ফেরত দেওয়া হয়। TransitDetails অবজেক্ট থেকে আপনি TransitStop, TransitLine, TransitAgency এবং VehicleType অবজেক্টের জন্য অতিরিক্ত তথ্য অ্যাক্সেস করতে পারবেন, যেমন নিচে বর্ণনা করা হয়েছে।

ট্রানজিট সংক্রান্ত বিবরণ

TransitDetails অবজেক্ট নিম্নলিখিত প্রপার্টি প্রকাশ করে:

  • arrival_stop-এ একটি TransitStop অবজেক্ট থাকে যা নিম্নলিখিত প্রপার্টি সহ গন্তব্য স্টেশন/স্টপকে দেখায়:
    • name ট্রানজিট স্টেশন/স্টপের নাম। যেমন, "ইউনিয়ন স্কোয়ার"।
    • location ট্রানজিট স্টেশন/স্টপের লোকেশন, LatLng হিসেবে দেখানো হয়েছে।
  • departure_stop-এ TransitStop অবজেক্ট আছে যা ছাড়ার স্টেশন/স্টপকে দেখায়।
  • arrival_time-এ পৌঁছানোর সময় থাকে, যা তিনটি প্রপার্টি সহ Time অবজেক্ট হিসেবে উল্লেখ করা হয়:
    • value জাভাস্ক্রিপ্ট অবজেক্ট হিসেবে Date নির্দিষ্ট করা সময়।
    • text স্ট্রিং হিসেবে নির্দিষ্ট করা সময়। ট্রানজিট স্টপের টাইম জোনে সময় দেখানো হয়।
    • time_zone-এ এই স্টেশনের টাইম জোন আছে। ভ্যালু হল টাইম জোনের নাম, যা IANA টাইম জোন ডেটাবেসে উল্লেখ করা আছে, যেমন "America/New_York"।
  • departure_time-এ ছাড়ার সময় থাকে, যা Time অবজেক্ট হিসেবে উল্লেখ করা হয়।
  • headsign এই লাইনে কোন দিকে যেতে হবে তা নির্দিষ্ট করে, যেমনটি গাড়িতে বা ছাড়ার স্টপে চিহ্নিত করা আছে। এটি প্রায়ই টার্মিনাস স্টেশন হবে।
  • headway উপলভ্য হলে, এটি এই সময়ে একই স্টপ থেকে ছাড়ার মধ্যে প্রত্যাশিত সেকেন্ডের সংখ্যা নির্দিষ্ট করে। যেমন, headway-এর ভ্যালু ৬০০ হলে, বাস মিস করলে আপনাকে দশ মিনিট অপেক্ষা করতে হবে।
  • line-এ একটি TransitLine অবজেক্ট লিটারাল থাকে যাতে এই ধাপে ব্যবহৃত ট্রানজিট লাইন সম্পর্কে তথ্য থাকে। TransitLine লাইনের নাম ও অপারেটর প্রদান করে, এর সাথে TransitLine রেফারেন্স ডকুমেন্টেশনে বর্ণিত অন্যান্য প্রপার্টিও প্রদান করে।
  • num_stops-এ এই ধাপে স্টপের সংখ্যা রয়েছে। পৌঁছানোর স্টপ অন্তর্ভুক্ত, কিন্তু প্রস্থানের স্টপ নয়। যেমন, আপনার দিকনির্দেশে যদি স্টপ A থেকে রওনা হয়ে, স্টপ B ও C পেরিয়ে স্টপ D-তে পৌঁছানোর কথা বলা হয়, তাহলে num_stops-এর ভ্যালু হবে ৩।

ট্রানজিট লাইন

TransitLine অবজেক্ট নিম্নলিখিত প্রপার্টি দেখায়:

  • name-এ এই ট্রানজিট লাইনের পুরো নাম রয়েছে। যেমন, "৭ অ্যাভিনিউ এক্সপ্রেস" বা "১৪ স্ট্রিট ক্রসটাউন"।
  • short_name-এ এই ট্রানজিট লাইনের সংক্ষিপ্ত নাম রয়েছে। এটি সাধারণত একটি লাইন নম্বর হবে, যেমন "২" বা "M১৪"।
  • agencies হল একটি অ্যারে যাতে একটি TransitAgency অবজেক্ট আছে। TransitAgency অবজেক্ট এই লাইনের অপারেটর সম্পর্কে তথ্য প্রদান করে, যার মধ্যে নিম্নলিখিত প্রপার্টি অন্তর্ভুক্ত:
    • name-এ ট্রানজিট এজেন্সির নাম থাকে।
    • phone-এ ট্রানজিট এজেন্সির ফোন নম্বর আছে।
    • url-এ ট্রানজিট এজেন্সির URL থাকে।

    মনে রাখবেন: আপনি যদি DirectionsRenderer অবজেক্ট ব্যবহার করার পরিবর্তে ম্যানুয়ালি ট্রানজিটের দিকনির্দেশ রেন্ডার করেন, তাহলে আপনাকে অবশ্যই ট্রিপের ফলাফল প্রদানকারী ট্রানজিট এজেন্সির নাম এবং URL দেখাতে হবে।

  • url-এ এই ট্রানজিট লাইনের জন্য একটি URL আছে যা ট্রানজিট এজেন্সি প্রদান করেছে।
  • icon-এ এই লাইনের সাথে যুক্ত আইকনের URL আছে। বেশিরভাগ শহরে সাধারণ আইকন ব্যবহার করা হবে যা গাড়ির ধরন অনুযায়ী আলাদা হবে। কিছু ট্রানজিট লাইনের ক্ষেত্রে, যেমন নিউ ইয়র্ক সাবওয়ে সিস্টেম, সেই লাইনের জন্য নির্দিষ্ট আইকন থাকে।
  • color-এ এমন রঙ আছে যা সাধারণত এই ট্রানজিটের জন্য সাইনেজে ব্যবহার করা হয়। রঙটি হেক্স স্ট্রিং হিসেবে উল্লেখ করা হবে, যেমন: #FF0033.
  • text_color-এ এই লাইনের সাইনেজের জন্য সাধারণত ব্যবহৃত টেক্সটের রঙ রয়েছে। রঙটি হেক্স স্ট্রিং হিসেবে নির্দিষ্ট করা হবে।
  • vehicle-এ একটি Vehicle অবজেক্ট আছে যাতে নিম্নলিখিত প্রপার্টি অন্তর্ভুক্ত আছে:
    • এই লাইনে name-এ গাড়ির নাম রয়েছে। যেমন, "সাবওয়ে।"
    • type-এ এই লাইনে ব্যবহৃত গাড়ির ধরন থাকে। সাপোর্ট করা ভ্যালুর সম্পূর্ণ তালিকা পেতে, গাড়ির ধরন সংক্রান্ত ডকুমেন্টেশন দেখুন।
    • icon-এ সাধারণত এই ধরনের গাড়ির সাথে যুক্ত আইকনের URL থাকে।
    • local_icon-এ স্থানীয় ট্রান্সপোর্ট সাইনেজের উপর ভিত্তি করে এই ধরনের গাড়ির সাথে সম্পর্কিত আইকনের URL থাকে।

গাড়ির প্রকার

VehicleType অবজেক্ট নিম্নলিখিত প্রপার্টি দেখায়:

ভ্যালু সংজ্ঞা
VehicleType.RAIL রেল।
VehicleType.METRO_RAIL লাইট রেল ট্রানজিট।
VehicleType.SUBWAY আন্ডারগ্রাউন্ড লাইট রেল।
VehicleType.TRAM মাটির উপরে লাইট রেল।
VehicleType.MONORAIL মনোরেল।
VehicleType.HEAVY_RAIL হেভি রেল।
VehicleType.COMMUTER_TRAIN লোকাল ট্রেন।
VehicleType.HIGH_SPEED_TRAIN হাই স্পিড ট্রেন।
VehicleType.BUS বাস।
VehicleType.INTERCITY_BUS ইন্টারসিটি বাস।
VehicleType.TROLLEYBUS ট্রলিবাস।
VehicleType.SHARE_TAXI শেয়ার ট্যাক্সি হল এক ধরনের বাস যা রুটের যেকোনও জায়গায় যাত্রী তুলতে ও নামাতে পারে।
VehicleType.FERRY ফেরি।
VehicleType.CABLE_CAR কেবলের মাধ্যমে চলে এমন গাড়ি, সাধারণত মাটিতে চলে। এরিয়াল কেবেল কার VehicleType.GONDOLA_LIFT ধরনের হতে পারে।
VehicleType.GONDOLA_LIFT একটি এরিয়াল কেবল কার।
VehicleType.FUNICULAR একটি গাড়ি যা কেবেলের মাধ্যমে খাড়া ঢাল বেয়ে উপরে তোলা হয়। একটি ফানিকুলারে সাধারণত দুটি গাড়ি থাকে, প্রতিটি গাড়ি অন্যটির জন্য কাউন্টারওয়েট হিসাবে কাজ করে।
VehicleType.OTHER অন্য সব গাড়ি এই ধরনের ফলাফল দেখাবে।

DirectionsResults পরীক্ষা করা হচ্ছে

DirectionsResults কম্পোনেন্ট — DirectionsRoute, DirectionsLeg, DirectionsStep এবং TransitDetails — যেকোনও দিকনির্দেশ সংক্রান্ত রেসপন্স পার্স করার সময় পরীক্ষা করা এবং ব্যবহার করা হতে পারে।

গুরুত্বপূর্ণ: আপনি যদি DirectionsRenderer অবজেক্ট ব্যবহার করার পরিবর্তে ম্যানুয়ালি ট্রানজিটের দিকনির্দেশ রেন্ডার করেন, তাহলে আপনাকে অবশ্যই ট্রিপের ফলাফল প্রদানকারী ট্রানজিট এজেন্সির নাম এবং URL দেখাতে হবে।

নিম্নলিখিত উদাহরণে নিউ ইয়র্ক সিটির নির্দিষ্ট কিছু পর্যটন কেন্দ্রে যাওয়ার জন্য হাঁটার দিকনির্দেশ দেখানো হয়েছে। আমরা প্রতিটি ধাপের জন্য মার্কার যোগ করতে রুটের DirectionsStep পরীক্ষা করি এবং সেই ধাপের জন্য নির্দেশমূলক টেক্সট সহ InfoWindow-এ তথ্য অ্যাটাচ করি।

মনে রাখবেন: যেহেতু আমরা হাঁটার দিকনির্দেশ গণনা করছি, তাই আমরা ব্যবহারকারীকে আলাদা <div> প্যানেলে যেকোনও সতর্কতাও দেখাই।

var map;
var directionsRenderer;
var directionsService;
var stepDisplay;
var markerArray = [];

function initMap() {
  // Instantiate a directions service.
  directionsService = new google.maps.DirectionsService();

  // Create a map and center it on Manhattan.
  var manhattan = new google.maps.LatLng(40.7711329, -73.9741874);
  var mapOptions = {
    zoom: 13,
    center: manhattan
  }
  map = new google.maps.Map(document.getElementById('map'), mapOptions);

  // Create a renderer for directions and bind it to the map.
  var rendererOptions = {
    map: map
  }
  directionsRenderer = new google.maps.DirectionsRenderer(rendererOptions)

  // Instantiate an info window to hold step text.
  stepDisplay = new google.maps.InfoWindow();
}

function calcRoute() {

  // First, clear out any existing markerArray
  // from previous calculations.
  for (i = 0; i < markerArray.length; i++) {
    markerArray[i].setMap(null);
  }

  // Retrieve the start and end locations and create
  // a DirectionsRequest using WALKING directions.
  var start = document.getElementById('start').value;
  var end = document.getElementById('end').value;
  var request = {
      origin: start,
      destination: end,
      travelMode: 'WALKING'
  };

  // Route the directions and pass the response to a
  // function to create markers for each step.
  directionsService.route(request, function(response, status) {
    if (status == "OK") {
      var warnings = document.getElementById("warnings_panel");
      warnings.innerHTML = "" + response.routes[0].warnings + "";
      directionsRenderer.setDirections(response);
      showSteps(response);
    }
  });
}

function showSteps(directionResult) {
  // For each step, place a marker, and add the text to the marker's
  // info window. Also attach the marker to an array so we
  // can keep track of it and remove it when calculating new
  // routes.
  var myRoute = directionResult.routes[0].legs[0];

  for (var i = 0; i < myRoute.steps.length; i++) {
      var marker = new google.maps.Marker({
        position: myRoute.steps[i].start_point,
        map: map
      });
      attachInstructionText(marker, myRoute.steps[i].instructions);
      markerArray[i] = marker;
  }
}

function attachInstructionText(marker, text) {
  google.maps.event.addListener(marker, 'click', function() {
    stepDisplay.setContent(text);
    stepDisplay.open(map, marker);
  });
}

HTML বডিতে:

<div>
<strong>Start: </strong>
<select id="start">
  <option value="penn station, new york, ny">Penn Station</option>
  <option value="grand central station, new york, ny">Grand Central Station</option>
  <option value="625 8th Avenue New York NY 10018">Port Authority Bus Terminal</option>
  <option value="staten island ferry terminal, new york, ny">Staten Island Ferry Terminal</option>
  <option value="101 E 125th Street, New York, NY">Harlem - 125th St Station</option>
</select>
<strong>End: </strong>
<select id="end" onchange="calcRoute();">
  <option value="260 Broadway New York NY 10007">City Hall</option>
  <option value="W 49th St & 5th Ave, New York, NY 10020">Rockefeller Center</option>
  <option value="moma, New York, NY">MOMA</option>
  <option value="350 5th Ave, New York, NY, 10118">Empire State Building</option>
  <option value="253 West 125th Street, New York, NY">Apollo Theatre</option>
  <option value="1 Wall St, New York, NY">Wall St</option>
</select>
<div>

উদাহরণ দেখুন

রুটে ওয়েপয়েন্ট ব্যবহার করা

DirectionsRequest-এ যেমন উল্লেখ করা আছে, আপনি হাঁটা, সাইকেল চালানো বা গাড়ি চালানোর দিকনির্দেশের জন্য Directions পরিষেবা ব্যবহার করে রুট গণনা করার সময় ওয়েপয়েন্ট (DirectionsWaypoint ধরনের) নির্দিষ্ট করতে পারেন। ট্রানজিটের দিকনির্দেশের জন্য ওয়েপয়েন্ট উপলভ্য নেই। ওয়েপয়েন্ট আপনাকে অতিরিক্ত লোকেশনের মাধ্যমে রুট গণনা করার অনুমতি দেয়, যেক্ষেত্রে ফেরত আসা রুট প্রদত্ত ওয়েপয়েন্টের মাধ্যমে পাস করে।

waypoint-এ নিম্নলিখিত ফিল্ড থাকে:

  • location (প্রয়োজনীয়) ওয়েপয়েন্টের ঠিকানা নির্দিষ্ট করে।
  • stopover (ঐচ্ছিক) এই ওয়েপয়েন্টটি রুটের প্রকৃত স্টপ (true) নাকি শুধুমাত্র নির্দেশিত লোকেশনের (false) মাধ্যমে রুট করার জন্য একটি পছন্দ তা নির্দেশ করে। স্টপওভার ডিফল্ট হিসেবে true।

ডিফল্ট হিসেবে, Directions পরিষেবা প্রদত্ত ওয়েপয়েন্টের মাধ্যমে প্রদত্ত ক্রমে একটি রুট গণনা করে। বিকল্প হিসেবে, আপনি DirectionsRequest-এর মধ্যে optimizeWaypoints: true পাস করতে পারেন যাতে Directions পরিষেবা আরও দক্ষ ক্রমে ওয়েপয়েন্টগুলি পুনর্বিন্যাস করে প্রদত্ত রুট অপ্টিমাইজ করতে পারে। (এই অপ্টিমাইজেশন হল ট্রাভেলিং সেলসপার্সন সমস্যার একটি অ্যাপ্লিকেশন।) ভ্রমণের সময় হল প্রাথমিক ফ্যাক্টর যা অপ্টিমাইজ করা হয়, তবে দূরত্ব, কতবার ঘুরতে হবে এবং আরও অনেক ফ্যাক্টর বিবেচনা করা হতে পারে যখন সিদ্ধান্ত নেওয়া হয় যে কোন রুটটি সবচেয়ে দক্ষ। Directions পরিষেবার মাধ্যমে রুট অপ্টিমাইজ করার জন্য সব ওয়েপয়েন্টকে স্টপওভার হতে হবে।

আপনি যদি Directions পরিষেবাকে এর ওয়েপয়েন্টের ক্রম অপ্টিমাইজ করার নির্দেশ দেন, তাহলে তাদের ক্রম DirectionsResult অবজেক্টের মধ্যে waypoint_order ফিল্ডে ফেরত দেওয়া হবে।

নিম্নলিখিত উদাহরণটি মার্কিন যুক্তরাষ্ট্র জুড়ে ক্রস-কান্ট্রি রুট গণনা করে বিভিন্ন ধরনের শুরু করার পয়েন্ট, শেষ করার পয়েন্ট, এবং ওয়েপয়েন্ট ব্যবহার করে। (একাধিক ওয়েপয়েন্ট বেছে নিতে, তালিকা থেকে আইটেম বেছে নেওয়ার সময় Ctrl-ক্লিক করুন।) মনে রাখবেন যে আমরা routes.start_address এবং routes.end_address পরীক্ষা করি যাতে প্রতিটি রুটের শুরু এবং শেষ পয়েন্টের জন্য টেক্সট প্রদান করা যায়।

TypeScript

function initMap(): void {
  const directionsService = new google.maps.DirectionsService();
  const directionsRenderer = new google.maps.DirectionsRenderer();
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 6,
      center: { lat: 41.85, lng: -87.65 },
    }
  );

  directionsRenderer.setMap(map);

  (document.getElementById("submit") as HTMLElement).addEventListener(
    "click",
    () => {
      calculateAndDisplayRoute(directionsService, directionsRenderer);
    }
  );
}

function calculateAndDisplayRoute(
  directionsService: google.maps.DirectionsService,
  directionsRenderer: google.maps.DirectionsRenderer
) {
  const waypts: google.maps.DirectionsWaypoint[] = [];
  const checkboxArray = document.getElementById(
    "waypoints"
  ) as HTMLSelectElement;

  for (let i = 0; i < checkboxArray.length; i++) {
    if (checkboxArray.options[i].selected) {
      waypts.push({
        location: (checkboxArray[i] as HTMLOptionElement).value,
        stopover: true,
      });
    }
  }

  directionsService
    .route({
      origin: (document.getElementById("start") as HTMLInputElement).value,
      destination: (document.getElementById("end") as HTMLInputElement).value,
      waypoints: waypts,
      optimizeWaypoints: true,
      travelMode: google.maps.TravelMode.DRIVING,
    })
    .then((response) => {
      directionsRenderer.setDirections(response);

      const route = response.routes[0];
      const summaryPanel = document.getElementById(
        "directions-panel"
      ) as HTMLElement;

      summaryPanel.innerHTML = "";

      // For each route, display summary information.
      for (let i = 0; i < route.legs.length; i++) {
        const routeSegment = i + 1;

        summaryPanel.innerHTML +=
          "<b>Route Segment: " + routeSegment + "</b><br>";
        summaryPanel.innerHTML += route.legs[i].start_address + " to ";
        summaryPanel.innerHTML += route.legs[i].end_address + "<br>";
        summaryPanel.innerHTML += route.legs[i].distance!.text + "<br><br>";
      }
    })
    .catch((e) => window.alert("Directions request failed due to " + status));
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

জাভাস্ক্রিপ্ট

function initMap() {
  const directionsService = new google.maps.DirectionsService();
  const directionsRenderer = new google.maps.DirectionsRenderer();
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 6,
    center: { lat: 41.85, lng: -87.65 },
  });

  directionsRenderer.setMap(map);
  document.getElementById("submit").addEventListener("click", () => {
    calculateAndDisplayRoute(directionsService, directionsRenderer);
  });
}

function calculateAndDisplayRoute(directionsService, directionsRenderer) {
  const waypts = [];
  const checkboxArray = document.getElementById("waypoints");

  for (let i = 0; i < checkboxArray.length; i++) {
    if (checkboxArray.options[i].selected) {
      waypts.push({
        location: checkboxArray[i].value,
        stopover: true,
      });
    }
  }

  directionsService
    .route({
      origin: document.getElementById("start").value,
      destination: document.getElementById("end").value,
      waypoints: waypts,
      optimizeWaypoints: true,
      travelMode: google.maps.TravelMode.DRIVING,
    })
    .then((response) => {
      directionsRenderer.setDirections(response);

      const route = response.routes[0];
      const summaryPanel = document.getElementById("directions-panel");

      summaryPanel.innerHTML = "";

      // For each route, display summary information.
      for (let i = 0; i < route.legs.length; i++) {
        const routeSegment = i + 1;

        summaryPanel.innerHTML +=
          "<b>Route Segment: " + routeSegment + "</b><br>";
        summaryPanel.innerHTML += route.legs[i].start_address + " to ";
        summaryPanel.innerHTML += route.legs[i].end_address + "<br>";
        summaryPanel.innerHTML += route.legs[i].distance.text + "<br><br>";
      }
    })
    .catch((e) => window.alert("Directions request failed due to " + status));
}

window.initMap = initMap;

ওয়েপয়েন্টের জন্য সীমা ও বিধিনিষেধ

নিম্নলিখিত ব্যবহারের সীমা এবং বিধিনিষেধ প্রযোজ্য:

  • Maps JavaScript API-তে Directions পরিষেবা ব্যবহার করার সময় সর্বাধিক ২৫টি ওয়েপয়েন্ট ব্যবহার করা যায়, এর সাথে শুরু ও গন্তব্যস্থল যোগ করা যায়। Directions API (Legacy) ওয়েব পরিষেবা-এর ক্ষেত্রেও একই সীমা প্রযোজ্য।
  • Directions API (Legacy) ওয়েব পরিষেবার জন্য, গ্রাহকরা ২৫টি ওয়েপয়েন্ট, সাথে শুরু ও গন্তব্যস্থল যোগ করতে পারবেন।
  • Google Maps Platform প্রিমিয়াম প্ল্যান ব্যবহারকারী গ্রাহকরা ২৫টি ওয়েপয়েন্ট, সাথে শুরু ও গন্তব্যস্থল যোগ করতে পারবেন।
  • ট্রানজিটের দিকনির্দেশের জন্য ওয়েপয়েন্ট কাজ করে না।

ড্র্যাগ করা যায় এমন দিকনির্দেশ

ব্যবহারকারীরা সাইকেল চালানো, হাঁটা বা গাড়ি চালানোর দিকনির্দেশ পরিবর্তন করতে পারেন যা DirectionsRenderer ব্যবহার করে ডায়নামিকভাবে দেখানো হয়, যদি সেগুলি ড্র্যাগ করা যায়, যা ব্যবহারকারীকে ম্যাপে দেখানো পাথ ক্লিক ও ড্র্যাগ করে রুট বেছে নিতে ও পরিবর্তন করতে দেয়। আপনি draggable প্রপার্টি true-এ সেট করে, রেন্ডারারের ডিসপ্লেতে ড্র্যাগ করা যায় এমন দিকনির্দেশ দেখানোর অনুমতি আছে কিনা তা উল্লেখ করেন। ট্রানজিটের দিকনির্দেশ ড্র্যাগ করা যাবে না।

দিকনির্দেশ ড্র্যাগ করা গেলে, ব্যবহারকারী রেন্ডার করা ফলাফলের পাথ (বা ওয়েপয়েন্ট)-এর যেকোনও পয়েন্ট বেছে নিতে এবং নির্দেশিত কম্পোনেন্ট নতুন লোকেশনে সরাতে পারবেন। DirectionsRenderer পরিবর্তিত পাথ দেখানোর জন্য ডায়নামিকভাবে আপডেট হবে। ছেড়ে দেওয়ার পরে, ম্যাপে একটি ট্রানজিশনাল ওয়েপয়েন্ট যোগ করা হবে (একটি ছোট সাদা মার্কারের মাধ্যমে এটি দেখানো হয়)। কোনও পাথ সেগমেন্ট বেছে নিয়ে সরালে রুটের সেই অংশটি পরিবর্তিত হবে, অন্যদিকে কোনও ওয়েপয়েন্ট মার্কার (শুরু ও শেষ পয়েন্ট সহ) বেছে নিয়ে সরালে সেই ওয়েপয়েন্টের মধ্যে দিয়ে যাওয়া রুটের অংশগুলি পরিবর্তিত হবে।

যেহেতু ড্র্যাগ করা যায় এমন দিকনির্দেশ ক্লায়েন্ট-সাইডে পরিবর্তন ও রেন্ডার করা হয়, তাই ব্যবহারকারী দেখানো দিকনির্দেশ পরিবর্তন করলে বিজ্ঞপ্তি পাওয়ার জন্য আপনি হয়ত DirectionsRenderer-এ directions_changed ইভেন্ট মনিটর ও ম্যানেজ করতে চাইবেন।

নিচের কোডটি অস্ট্রেলিয়ার পশ্চিম উপকূলের পার্থ থেকে পূর্ব উপকূলের সিডনি পর্যন্ত একটি ট্রিপ দেখায়। কোডটি directions_changed ইভেন্ট মনিটর করে যাতে যাত্রার সবকটি লেগের মোট দূরত্ব আপডেট করা যায়।

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 4,
      center: { lat: -24.345, lng: 134.46 }, // Australia.
    }
  );

  const directionsService = new google.maps.DirectionsService();
  const directionsRenderer = new google.maps.DirectionsRenderer({
    draggable: true,
    map,
    panel: document.getElementById("panel") as HTMLElement,
  });

  directionsRenderer.addListener("directions_changed", () => {
    const directions = directionsRenderer.getDirections();

    if (directions) {
      computeTotalDistance(directions);
    }
  });

  displayRoute(
    "Perth, WA",
    "Sydney, NSW",
    directionsService,
    directionsRenderer
  );
}

function displayRoute(
  origin: string,
  destination: string,
  service: google.maps.DirectionsService,
  display: google.maps.DirectionsRenderer
) {
  service
    .route({
      origin: origin,
      destination: destination,
      waypoints: [
        { location: "Adelaide, SA" },
        { location: "Broken Hill, NSW" },
      ],
      travelMode: google.maps.TravelMode.DRIVING,
      avoidTolls: true,
    })
    .then((result: google.maps.DirectionsResult) => {
      display.setDirections(result);
    })
    .catch((e) => {
      alert("Could not display directions due to: " + e);
    });
}

function computeTotalDistance(result: google.maps.DirectionsResult) {
  let total = 0;
  const myroute = result.routes[0];

  if (!myroute) {
    return;
  }

  for (let i = 0; i < myroute.legs.length; i++) {
    total += myroute.legs[i]!.distance!.value;
  }

  total = total / 1000;
  (document.getElementById("total") as HTMLElement).innerHTML = total + " km";
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

জাভাস্ক্রিপ্ট

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: { lat: -24.345, lng: 134.46 }, // Australia.
  });
  const directionsService = new google.maps.DirectionsService();
  const directionsRenderer = new google.maps.DirectionsRenderer({
    draggable: true,
    map,
    panel: document.getElementById("panel"),
  });

  directionsRenderer.addListener("directions_changed", () => {
    const directions = directionsRenderer.getDirections();

    if (directions) {
      computeTotalDistance(directions);
    }
  });
  displayRoute(
    "Perth, WA",
    "Sydney, NSW",
    directionsService,
    directionsRenderer,
  );
}

function displayRoute(origin, destination, service, display) {
  service
    .route({
      origin: origin,
      destination: destination,
      waypoints: [
        { location: "Adelaide, SA" },
        { location: "Broken Hill, NSW" },
      ],
      travelMode: google.maps.TravelMode.DRIVING,
      avoidTolls: true,
    })
    .then((result) => {
      display.setDirections(result);
    })
    .catch((e) => {
      alert("Could not display directions due to: " + e);
    });
}

function computeTotalDistance(result) {
  let total = 0;
  const myroute = result.routes[0];

  if (!myroute) {
    return;
  }

  for (let i = 0; i < myroute.legs.length; i++) {
    total += myroute.legs[i].distance.value;
  }

  total = total / 1000;
  document.getElementById("total").innerHTML = total + " km";
}

window.initMap = initMap;
উদাহরণ দেখুন