একটি গাড়ী সহ অবস্থানগুলিতে নেভিগেট করার সময় সর্বোত্তম ব্যবহারকারীর অভিজ্ঞতা তৈরি করার টিপস৷

এই নথিটি একটি পুরোনো নিবন্ধের পরিমার্জিত রূপ, যেখানে GMP API-এর পূর্ববর্তী সংস্করণগুলো ব্যবহার করা হয়েছিল। এই বিষয়বস্তুটি ২০২৩-২৪ সালে চালু হওয়া Places API এবং ২০২৩ সালে চালু হওয়া Routes API-এর নতুন সংস্করণ অনুযায়ী হালনাগাদ করা হয়েছে।

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

System diagram

আমরা দেখাবো কিভাবে আপনি আপনার গন্তব্যের পাশে পার্ক করার জন্য সঠিক জায়গা খুঁজে বের করতে নতুন প্লেসেস এপিআই (Places API) এবং রুটস এপিআই (Routes API) পর্যায়ক্রমে বা একত্রে ব্যবহার করতে পারেন। এই সমাধানটির লক্ষ্য হলো, চূড়ান্ত গন্তব্যের কাছাকাছি পৌঁছানোর পর গাড়ি চালানোর সময় পার্ক করার জায়গা খোঁজার অনিশ্চয়তা এবং একাধিকবার চেষ্টা করার প্রয়োজনীয়তা দূর করা। এই বিষয়গুলো বিস্তারিতভাবে কীভাবে বাস্তবায়ন করা যেতে পারে, তার দুটি উদাহরণ দেখে নিন।

উদাহরণ ১ - একটি পর্যটন কেন্দ্র যেখানে কোনো পার্কিং লট নেই

এমন একটি স্থান বেছে নিন যা সরাসরি রাস্তার সাথে সংযুক্ত নয়, যাতে আলাদাভাবে একটি পথ খুঁজে নিতে হয়। গন্তব্যস্থল হলো প্যারিসের নটর ডেম এবং শুরুর স্থান হিসেবে আমরা গার দে ল'এস্ট রেলওয়ে স্টেশন (48.87697775149635, 2.3592247806755564) ব্যবহার করব।

Gare l'Est

চালক নটর ডেম থেকে প্রায় ১৬ মিনিট উত্তরে স্টেশন থেকে রওনা হন। নটর ডেম একটি দ্বীপের উপর অবস্থিত একটি বিখ্যাত পর্যটন কেন্দ্র, যেখানে সেতুর মাধ্যমে যাতায়াত করা যায়, কিছু একমুখী রাস্তা আছে এবং কাছাকাছি কোনো বড় পার্কিং লট নেই, তাই এটি একটি আকর্ষণীয় চ্যালেঞ্জ হবে।

১. এপিআই অনুরোধ প্রেরণ করে

এই উদাহরণ প্লেসেস এপিআই অনুরোধটি নটর ডেম খুঁজে বের করার জন্য টেক্সট সার্চ ব্যবহার করছে। বিস্তারিত জানার জন্য ডেভেলপার ডকুমেন্টেশন দেখুন। এই উদাহরণগুলিতে "$APIKEY" হলো সেই এপিআই কী, যা আপনার গুগল ক্লাউড কনসোলে সক্রিয় করা গুগল ম্যাপস প্ল্যাটফর্মের প্লেসেস এবং রুটস এপিআই-এর জন্য রয়েছে। আরও বিস্তারিত ব্যাখ্যার জন্য গুগল ম্যাপস প্ল্যাটফর্ম দিয়ে শুরু করার ডকুমেন্টেশন দেখুন।

নতুন Places API অনুরোধগুলোর একটি নতুন ফরম্যাট রয়েছে। রেসপন্স ফিল্ডগুলো আর নির্দিষ্ট নয় এবং একজন ডেভেলপার হিসেবে আপনাকে হেডারে একটি ফিল্ডমাস্ক নির্ধারণ করতে হবে। ডকুমেন্টেশনে ফিল্ডমাস্কের ব্যবহার বর্ণনা করা হয়েছে।

curl -X POST --data @notre_dame.json \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: places.id,places.displayName,places.formattedAddress,places.location' \
'https://places.googleapis.com/v1/places:searchText'

সার্চ প্যারামিটার হিসেবে 'notre_date.json'-এর কন্টেন্ট ব্যবহার করে:

{
   "textQuery": "Notre Dame, Paris",
   "languageCode": "en"
}

উপরোক্ত অনুরোধের জবাবে নিম্নলিখিত অক্ষাংশ ও দ্রাঘিমাংশের স্থানাঙ্ক পাওয়া যায়:

{
  "places": [
    {
      "id": "ChIJATr1n-Fx5kcRjQb6q6cdQDY",
      "formattedAddress": "6 Parvis Notre-Dame - Pl. Jean-Paul II, 75004 Paris, France",
      "location": {
        "latitude": 48.852968200000007,
        "longitude": 2.3499021
      },
      "displayName": {
        "text": "Cathédrale Notre-Dame de Paris",
        "languageCode": "en"
      }
    }
  ]
}

যেমনটা দেখতে পাচ্ছেন, স্থানাঙ্কগুলো প্রকৃতপক্ষে নটর ডেমকেই নির্দেশ করছে।

Notre Dame entrance photoMap of Notre Dame area

একজন ডেভেলপার বা পরিষেবা প্রদানকারী হিসেবে, চালককে স্বয়ংক্রিয়ভাবে জিজ্ঞাসা করা যেতে পারে, "নটর ডেমের কাছে পার্কিং খুঁজছেন?" অথবা চালকের যদি একটি বৈদ্যুতিক যান থাকে, তবে আপনি একটি চার্জিং স্টেশন খুঁজতে পারেন। ডিভাইস এবং স্ক্রিনের উপর নির্ভর করে ব্যবহারকারীর অভিজ্ঞতা ভিন্ন হবে, কিন্তু এক্ষেত্রে একটি হালকা ডায়ালগ টেক্সট যা অল্প সময়ের মধ্যে অদৃশ্য হয়ে যায়, তা বিবেচনা করার মতো হতে পারে। নটর ডেমের কাছে পার্কিং খুঁজে পেতে, প্লেসেস এপিআই (Places API) ব্যবহার করে "parking" এবং "electric_vehicle_charging_station" টাইপের মাধ্যমে ৫০০ মিটার ব্যাসার্ধে একটি নিকটবর্তী অনুসন্ধান (nearby search) করুন। নিম্নলিখিত উদাহরণটি নটর ডেমের ৫০০ মিটারের মধ্যে অবস্থিত পার্কিং এলাকাগুলিতে ফলাফলকে সীমাবদ্ধ করবে।

curl -X POST -d '{
  "includedTypes": ["parking", "electric_vehicle_charging_station"],
  "maxResultCount": 10,
  "rankPreference": "DISTANCE",
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 48.852968200000007,
        "longitude": 2.3499021},
      "radius": 500.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H "X-Goog-FieldMask: places.displayName,places.location" \
https://places.googleapis.com/v1/places:searchNearby

প্রথম ফলাফলটি হলো 48.854981, 2.350629 স্থানাঙ্কে অবস্থিত একটি চার্জিং স্টেশন, যদিও আপনি যখন এই উদাহরণটি চালাবেন, তখন আপনার ফলাফল ভিন্ন হতে পারে। পরবর্তী অংশে, যেখানে আমরা একটি রাউটস এপিআই (Routes API) অনুরোধ করব, সেখানে এই অবস্থানটি ব্যবহার করুন।

২. রাউটস এপিআই অনুরোধ

স্টেশন থেকে নটর ডেমের কাছাকাছি কোনো চার্জিং স্টেশনে যাওয়ার পথ খুঁজে পেতে, আপনাকে একটি রাউটস এপিআই (Routes API) অনুরোধ করতে হবে। শুধু অরিজিন (origin) এবং ডেস্টিনেশন (destination) প্যারামিটারগুলো সেট করুন। আরও বিকল্পের জন্য ডেভেলপার ডকুমেন্টেশন দেখুন।

curl -X POST -d '{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 48.87697775149635,
        "longitude": 2.3592247806755564
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
       "latitude": 48.854981,
        "longitude": 2.350629
      }
    }
  },
  "travelMode": "DRIVE",
  "routingPreference": "TRAFFIC_AWARE",
  "departureTime": "2024-05-16T15:01:23.045123456Z",
  "computeAlternativeRoutes": false,
  "routeModifiers": {
    "avoidTolls": false,
    "avoidHighways": false,
    "avoidFerries": false
  },
  "languageCode": "en-US",
  "units": "METRIC"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,routes.polyline.encodedPolyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Routes API রেসপন্সে সাধারণত একাধিক রুটের সাজেশন থাকে। রেসপন্সে রুটের ডেটা অন্তর্ভুক্ত করতে, ফিল্ডমাস্কে 'routes.legs' ডিফাইন করুন। প্রতিটি রুটে একাধিক 'লেগ' থাকে এবং সেগুলিতে একাধিক 'স্টেপ' থাকে যা ভ্রমণের দূরত্ব এবং স্থানাঙ্ক দেখায়। গাড়ি দিয়ে পৌঁছানো যায় এমন চূড়ান্ত স্থানাঙ্ক খুঁজে পেতে, আপনার নির্বাচিত রুটের শেষ লেগের শেষ স্টেপের 'endLocation' ফিল্ডটি ব্যবহার করুন। 'latitude': 48.854937299999996, 'longitude': 2.3505841999999997

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

Directions to Notre Dame

চার্জিং স্টেশন পার্কিং স্পট থেকে নটর ডেম পর্যন্ত হাঁটার পথ

উদাহরণ ১ এর সারাংশ

যেমনটি আপনি দেখতে পাচ্ছেন, গাড়ির জন্য পার্কিং এলাকা খুঁজে বের করতে এবং চালককে পরামর্শটি প্রদর্শন করতে মাত্র কয়েকটি এপিআই কলের প্রয়োজন হয়। এটি আপনার ব্যবহারকারীদের সময় বাঁচায়, কারণ তাদের একমুখী রাস্তায় গাড়ি চালাতে হয় না বা কোনো জনাকীর্ণ পর্যটন কেন্দ্রে গাড়ি রাখার জায়গা খুঁজতে হয় না। সারসংক্ষেপে, আমরা নিম্নলিখিত এপিআই অনুরোধগুলো করেছি:

  • নটর ডেমের স্থানাঙ্ক খুঁজে বের করার জন্য প্লেসেস এপিআই-এর একটি টেক্সট সার্চ অনুরোধ।
  • ঐ স্থানাঙ্কের ৫০০ মিটারের মধ্যে বৈদ্যুতিক গাড়ি চার্জিং স্টেশনসহ একটি পার্কিং এলাকা খুঁজে বের করার জন্য প্লেসেস এপিআই (Places API) ব্যবহার করে নিকটবর্তী অনুসন্ধান।
  • চার্জিং স্টেশনে যাওয়ার পথ খুঁজে বের করার জন্য একটি রাউটস এপিআই অনুরোধ।

উদাহরণ ২ - একটি বড় বিমানবন্দরের টার্মিনালে যাওয়ার পথ দেখানো

Map of Heathrow airport

আরেকটি উদাহরণ বিবেচনা করুন যেখানে চালক এমন একটি বড় এলাকায় পৌঁছানোর চেষ্টা করছেন যেখানে একাধিক অবস্থান, আগ্রহের স্থান (POI) বা সম্ভাব্য নামার জায়গা রয়েছে। চালক যুক্তরাজ্যের ওয়েম্বলি স্টেডিয়াম (51.557263604707224, -0.2794575145680608) থেকে যাত্রা শুরু করে লন্ডন হিথ্রো বিমানবন্দরের টার্মিনাল ৫-এ পৌঁছানোর চেষ্টা করছেন।

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

curl -X POST -d '{
  "input": "Heathrow",
  "includedPrimaryTypes": ["airport", "parking"]
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
https://places.googleapis.com/v1/places:autocomplete

উপরের কোয়েরিটি আমাদের টার্মিনাল এবং সেই টার্মিনালগুলোর প্রতিটি ড্রপ-অফ পয়েন্টের একটি তালিকা দেয়। ফলাফলের তালিকা থেকে আমরা "লন্ডন হিথ্রো এয়ারপোর্ট টার্মিনাল ৫" এবং এর প্লেস আইডি খুঁজে পেতে পারি:

"place_id" : "ChIJo21hnPxxdkgRksRL0KQRWII",

'placeId' প্যারামিটারটি ব্যবহার করে আমরা Routes API-কে জানাতে পারি যে আমরা কোনো যথেচ্ছ স্থানাঙ্কের পরিবর্তে একটি নির্দিষ্ট স্থানে পৌঁছানোর চেষ্টা করছি।

curl -X POST -d '{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 51.557263604707224,
        "longitude": -0.2794575145680608
      }
    }
  },
  "destination":{
    "placeId": "ChIJo21hnPxxdkgRksRL0KQRWII"
  },
  "travelMode": "DRIVE",
  "routingPreference": "TRAFFIC_AWARE",
  "departureTime": "2024-05-16T15:01:23.045123456Z",
  "computeAlternativeRoutes": false,
  "languageCode": "en-US",
  "units": "METRIC"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,routes.polyline.encodedPolyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

আবার, আগের উদাহরণের মতোই, JSON রেসপন্সের সমস্ত ধাপগুলো পড়লে আপনি যাত্রার শেষ অংশ এবং শেষ গন্তব্যের অক্ষাংশ ও দ্রাঘিমাংশের স্থানাঙ্ক (51.4714348, "longitude": -0.48967890000000003) খুঁজে পাবেন।

Terminal 5 Street View

উদাহরণ ২ এর সারাংশ

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

  • হিথ্রো বিমানবন্দর টার্মিনাল ৫ খুঁজে বের করার জন্য একটি প্লেসেস এপিআই অটোকমপ্লিট (নতুন) অনুরোধ।
  • ওয়েম্বলি থেকে টার্মিনাল ৫-এ যাওয়ার পথ পাওয়ার জন্য একটি রাউটস এপিআই অনুরোধ।

এই উদাহরণটি নতুন প্লেসেস এপিআই (Places API) ফিচারগুলোর একটি ক্ষুদ্র অংশ মাত্র। এয়ারস্ট্রিপ এবং আন্তর্জাতিক বিমানবন্দরের মতো কিছু নতুন প্লেস টাইপ দেখে নিন।

উপসংহার

যেমনটি দেখতে পাচ্ছেন, গাড়িতে যাতায়াতকারী আপনার গ্রাহকদের একটি প্রিমিয়াম পরিষেবা প্রদানের জন্য প্রয়োজনীয় উন্নয়ন প্রচেষ্টা বেশ কম এবং এর মাধ্যমে আপনি দেখাতে পারবেন যে আপনি আপনার গ্রাহকদের চাহিদা নিয়ে কীভাবে ভাবছেন।

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

পরবর্তী পদক্ষেপ

জিএমপি দিয়ে শুরু করা : https://developers.google.com/maps/get-started

আরও পড়ার জন্য পরামর্শ

Places API অটোকমপ্লিট (নতুন) ডকুমেন্টেশন : https://developers.google.com/maps/documentation/places/web-service/place-autocomplete

রাউটস এপিআই ডকুমেন্টেশন : https://developers.google.com/maps/documentation/routes

অবদানকারীরা

প্রধান লেখক: Mikko Toivanen | গুগল ম্যাপ প্ল্যাটফর্ম সলিউশন ইঞ্জিনিয়ার