রুট পলিলাইনের অনুরোধ করা

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

computeRoutes পদ্ধতি (REST) এবং ComputeRoutes পদ্ধতি (gRPC) দুটিই উত্তরের অংশ হিসেবে পলিলাইন দ্বারা উপস্থাপিত রুট ফেরত দেয়। এই API দুই ধরনের পলিলাইন রিটার্ন করে:

  • বেসিক পলিলাইন (ডিফল্ট), একটি রুট দেখায় কিন্তু পলিলাইনে ট্রাফিক তথ্য থাকে না। যেসব অনুরোধের উত্তরে বেসিক পলিলাইন পাওয়া যায় সেগুলির জন্য Routes Basic রেটে বিল করা হয়। Routes API-এর জন্য বিলিং সম্পর্কে আরও জানুন।

  • ট্রাফিক-অ্যাওয়ার পলিলাইন, রুট বরাবর ট্রাফিক পরিস্থিতি সম্পর্কে তথ্য থাকে। ট্রাফিক পরিস্থিতিকে স্পিড ক্যাটেগরি (NORMAL, SLOW, TRAFFIC_JAM) হিসেবে প্রকাশ করা হয় যা পলিলাইনের নির্দিষ্ট ব্যবধানে প্রযোজ্য। ট্রাফিক-অ্যাওয়ার পলিলাইনের জন্য অনুরোধ Routes Preferred রেট অনুযায়ী বিল করা হয়। Routes API-এর জন্য বিলিং সম্পর্কে আরও জানুন। আরও জানতে, পলিলাইন কোয়ালিটি কনফিগার করুন

পলিলাইন সম্পর্কে আরও জানতে, দেখুন:

কোনও রুট, লেগ বা ধাপের জন্য বেসিক পলিলাইনের অনুরোধ করা

পলিলাইনকে Polyline (REST) বা Polyline (gRPC) অবজেক্টের মাধ্যমে দেখানো হয়। আপনি রুট, লেগ ও স্টেপ লেভেলে উত্তরে পলিলাইন ফেরত দিতে পারবেন।

রেসপন্স ফিল্ড মাস্ক ব্যবহার করে কোন পলিলাইন ফেরত দিতে হবে তা নির্দিষ্ট করুন:

  • রুট লেভেলে, রেসপন্স ফিল্ড মাস্কে routes.polyline অন্তর্ভুক্ত করে রেসপন্সে পলিলাইন রিটার্ন করুন।

  • লেগ লেভেলে, routes.legs.polyline অন্তর্ভুক্ত করে রুটের প্রতিটি লেগের জন্য রেসপন্সে একটি পলিলাইন ফেরত দিন।

  • ধাপ লেভেলে, routes.legs.steps.polyline অন্তর্ভুক্ত করে লেগের প্রতিটি ধাপের জন্য উত্তরে একটি পলিলাইন ফেরত দিন।

যেমন, পুরো রুটের জন্য, প্রতিটি লেগের জন্য এবং প্রতিটি লেগের প্রতিটি ধাপের জন্য পলিলাইন ফেরত দিতে:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "travelMode": "DRIVE"
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline,routes.legs.steps.polyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

এই অনুরোধ নিম্নলিখিত উত্তর প্রদান করে যার মধ্যে রুটের জন্য, রুটের প্রতিটি লেগের জন্য এবং লেগের প্রতিটি ধাপের জন্য পলিলাইন অন্তর্ভুক্ত থাকে:

{
  "routes": [
    {
      "legs": [
        {
          "polyline": {
              "encodedPolyline": "ipkcFfich...@Bs@?A?O?SD{A@o@B}@I?qA?_AA_@@_@?"
          }
        },
          "steps": [
              {
                  "polyline": {
                      "encodedPolyline": "kclcF...@sC@YIOKI"
                  }
              },
              {
                  "polyline": {
                      "encodedPolyline": "wblcF~...SZSF_@?"
                  }
              },
              ...
      ],
      "distanceMeters": 56901,
      "duration": "2420s",
      "polyline": {
        "encodedPolyline": "ipkcFfich...@Bs@?A?O?SD{A@o@B}@I?qA?_AA_@@_@?"
      }
    }
  ]
}

এই অনুরোধে শুধুমাত্র একটি উৎস এবং একটি গন্তব্য রয়েছে, তাই ফেরত আসা রুটে শুধুমাত্র একটি লেগ রয়েছে। তাই, লেগ ও রুটের জন্য পলিলাইন একই।

আপনি অনুরোধে কোনও মধ্যবর্তী ওয়েপয়েন্ট যোগ করলে, ফেরত পাঠানো রুটে দুটি লেগ থাকে:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "intermediates": [
    { "address": "450 Serra Mall, Stanford, CA 94305, USA"},
  ],
  "travelMode": "DRIVE",
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

এই অনুরোধ দুটি লেগ রিটার্ন করে, যার প্রতিটিতে একটি অনন্য পলিলাইন এবং সম্পূর্ণ রুটের জন্য একটি পলিলাইন রয়েছে:

{
  "routes": [
    {
      "legs": [
        {
          "polyline": {
            "encodedPolyline": "kclcFfqchV?A...?I@G?GAECCCEKICBAFG"
          }
          "steps": [
            {
                "polyline": {
                    "encodedPolyline": "kclcFfqch...YIOKI"
                }
            },
        ...
        },
        {
          "polyline": {
            "encodedPolyline": "ojmcFtethV?K...QOYQOGA?_@MUG[Ga@G"
          }
          "steps": [
            {
                "polyline": {
                    "encodedPolyline": "uypeFbo`jVgJq...PoBiC"
                }
            },
        ...
        }
      ],
      "distanceMeters": 68403,
      "duration": "3759s",
      "polyline": {
          "encodedPolyline": "kclcFfqchV?A?CBKF[Ha...?GAECCCEKICBAFGJEBE"
      }
    }
  ]
}

পলিলাইনের কোয়ালিটি

পলিলাইনের কোয়ালিটি নিম্নলিখিত শব্দগুলির মাধ্যমে বর্ণনা করা যেতে পারে:

  • পয়েন্টের ফ্লোটিং-পয়েন্ট প্রিসিশন

    পয়েন্টগুলি অক্ষাংশ এবং দ্রাঘিমাংশের মান হিসাবে নির্দিষ্ট করা হয়, যা একক-নির্ভুল ফ্লোটিং-পয়েন্ট ফর্ম্যাটে উপস্থাপন করা হয়। এটি ছোট ভ্যালুর ক্ষেত্রে ভাল কাজ করে (যা সঠিকভাবে উপস্থাপন করা যেতে পারে), তবে ফ্লোটিং-পয়েন্ট রাউন্ডিং এররের কারণে ভ্যালু বৃদ্ধি পেলে নির্ভুলতা কমে যায়।

    computeRoutes পদ্ধতি (REST) এবং ComputeRoutes-এ, এটি polylineEncoding দ্বারা নিয়ন্ত্রিত হয়।

  • পলিলাইন তৈরি করে এমন পয়েন্টের সংখ্যা

    যত বেশি পয়েন্ট থাকবে, পলিলাইন তত মসৃণ হবে (বিশেষ করে বাঁকে)।

    computeRoutes পদ্ধতি (REST) এবং ComputeRoutes-এ, এটি polylineQuality দ্বারা নিয়ন্ত্রিত হয়।

পলিলাইন এনকোডিংয়ের ধরন কনফিগার করুন

পলিলাইন টাইপ কন্ট্রোল করার জন্য polylineEncoding অনুরোধের বিকল্প ব্যবহার করুন। polylineEncoding প্রপার্টি নিয়ন্ত্রণ করে যে পলিলাইন ENCODED_POLYLINE (ডিফল্ট) হিসেবে এনকোড করা হবে কিনা, যার অর্থ হল এনকোড করা পলিলাইন অ্যালগরিদম ফর্ম্যাট ব্যবহার করা হবে, অথবা GEO_JSON_LINESTRING, যার অর্থ হল GeoJSON লাইনস্ট্রিং ফর্ম্যাট ব্যবহার করা হবে।

যেমন, অনুরোধের প্রধান অংশে:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "travelMode": "DRIVE",
  "polylineEncoding": "ENCODED_POLYLINE"
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

পলিলাইনের কোয়ালিটি কনফিগার করুন

polylineQuality পলিলাইনের কোয়ালিটি HIGH_QUALITY বা OVERVIEW (ডিফল্ট) হিসেবে নির্দিষ্ট করে। OVERVIEW-এর সাথে, পলিলাইনটি অল্প সংখ্যক পয়েন্ট ব্যবহার করে তৈরি করা হয় এবং HIGH_QUALITY-এর চেয়ে কম অনুরোধ লেটেন্সি থাকে।

যেমন, অনুরোধের প্রধান অংশে:

{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.419734,
        "longitude": -122.0827784
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.417670,
        "longitude": -122.079595
      }
    }
  },
  "travelMode": "DRIVE",
  "routingPreference": "TRAFFIC_AWARE",
  "polylineQuality": "HIGH_QUALITY",
  "polylineEncoding": "ENCODED_POLYLINE",
  "departureTime": "2023-10-15T15:01:23.045123456Z",
  ...
}

ট্রাফিক-অ্যাওয়ার পলিলাইনের জন্য অনুরোধ করুন

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

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

যেমন, নিম্নলিখিত উত্তরে পলিলাইন পয়েন্ট ২ ও ৪-এর মধ্যে NORMAL ট্রাফিক দেখানো হয়েছে:

{
  "startPolylinePointIndex": 2,
  "endPolylinePointIndex": 4,
  "speed": "NORMAL"
}

ট্রাফিক-অ্যাওয়ার পলিলাইন গণনা করার জন্য অনুরোধ করতে, অনুরোধে নিম্নলিখিত প্রপার্টি সেট করুন:

  • ট্রাফিক গণনা চালু করতে extraComputations অ্যারে ফিল্ড TRAFFIC_ON_POLYLINE-এ সেট করুন।

  • travelMode-কে DRIVE বা TWO_WHEELER-এ সেট করুন। অন্য কোনও ভ্রমণ মোডের জন্য অনুরোধ করা হলে একটি ত্রুটি রিটার্ন করে।

  • অনুরোধে TRAFFIC_AWARE বা TRAFFIC_AWARE_OPTIMAL রাউটিং পছন্দ উল্লেখ করুন। আরও তথ্যের জন্য, কোয়ালিটি বনাম লেটেন্সি কনফিগার করুন।

  • একটি রেসপন্স ফিল্ড মাস্ক সেট করুন যা রেসপন্স প্রপার্টি ফেরত দেওয়ার জন্য নির্দিষ্ট করে:

    • রুট লেভেলে, রেসপন্স ফিল্ড মাস্কে routes.travelAdvisory অন্তর্ভুক্ত করে রেসপন্সে সমস্ত ভ্রমণ সংক্রান্ত তথ্য ফেরত দিন। শুধুমাত্র ট্রাফিক সংক্রান্ত তথ্য ফেরত পেতে, routes.travelAdvisory.speedReadingIntervals নির্দিষ্ট করুন

    • লেগ লেভেলে, routes.legs.travelAdvisory অন্তর্ভুক্ত করে রুটের প্রতিটি লেগের জন্য উত্তরে সমস্ত ভ্রমণ সংক্রান্ত তথ্য ফেরত দিন। শুধুমাত্র ট্রাফিক সংক্রান্ত তথ্য পেতে, routes.legs.travelAdvisory.speedReadingIntervals উল্লেখ করুন।

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "travelMode": "DRIVE",
  "extraComputations": ["TRAFFIC_ON_POLYLINE"],
  "routingPreference": "TRAFFIC_AWARE_OPTIMAL"
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline,routes.travelAdvisory,routes.legs.travelAdvisory' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

ট্রাফিক-অ্যাওয়ার পলিলাইনের জন্য উত্তর দেওয়ার উদাহরণ

উত্তরে, ট্রাফিক ডেটা পলিলাইনে এনকোড করা থাকে এবং travelAdvisory ফিল্ডে থাকে, যার ধরন হল RouteLegTravelAdvisory অবজেক্ট (প্রতিটি লেগ) এবং RouteTravelAdvisory অবজেক্ট (রুট)।

যেমন:

{
  "routes": [
    {
      "legs": {
        "polyline": {
          "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD"
        },
        // Traffic data for the leg.
        "travelAdvisory": {
          "speedReadingIntervals": [
            {
              "endPolylinePointIndex": 1,
              "speed": "NORMAL"
            },
            {
              "startPolylinePointIndex": 1,
              "endPolylinePointIndex": 2,
              "speed": "SLOW"
            },
            {
              "startPolylinePointIndex": 2,
              "endPolylinePointIndex": 4,
              "speed": "NORMAL"
            }
          ] 
        }
      },
      "polyline": {
        "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD"
      },
      // Traffic data for the route.
      "travelAdvisory": {
        "speedReadingIntervals": [
          {
            "endPolylinePointIndex": 1,
            "speed": "NORMAL"
          },
          {
            "startPolylinePointIndex": 1,
            "endPolylinePointIndex": 2,
            "speed": "SLOW"
          },
          {
            "startPolylinePointIndex": 2,
            "endPolylinePointIndex": 4,
            "speed": "NORMAL"
          }
        ] 
      }
    }
  ]
}

RouteTravelAdvisory এবং RouteLegTravelAdvisory, দুটিতেই speedReadingIntervals নামের একটি অ্যারে ফিল্ড আছে যেখানে ট্রাফিক স্পিড সংক্রান্ত তথ্য থাকে। অ্যারের প্রতিটি অবজেক্টকে SpeedReadingInterval (REST) বা SpeedReadingInterval (gRPC) অবজেক্টের মাধ্যমে দেখানো হয়।

SpeedReadingInterval অবজেক্টে কোনও রুটের ইন্টারভ্যালের জন্য স্পিড রিডিং অন্তর্ভুক্ত থাকে, যেমন NORMAL, SLOW বা TRAFFIC_JAM। অবজেক্টের সম্পূর্ণ অ্যারে, ওভারল্যাপ না করে রুটের সম্পূর্ণ পলিলাইন কভার করে। নির্দিষ্ট করা কোনও বিরতির শুরুর পয়েন্ট পূর্ববর্তী বিরতির শেষ পয়েন্টের সাথে একই হয়।

প্রতিটি ইন্টারভ্যাল তার startPolylinePointIndex, endPolylinePointIndex এবং সংশ্লিষ্ট স্পিড ক্যাটেগরি দ্বারা বর্ণনা করা হয়। লক্ষ্য করুন যে ইন্টারভ্যালের মধ্যে শুরু করার ইন্ডেক্স না থাকার অর্থ হল proto3 প্র্যাক্টিস অনুযায়ী ইন্ডেক্স ০।

startPolylinePointIndex এবং endPolylinePointIndex ভ্যালু সবসময় পরপর থাকে না। যেমন:

{
  "startPolylinePointIndex": 2,
  "endPolylinePointIndex": 4,
  "speed": "NORMAL"
}

এই ক্ষেত্রে, ইনডেক্স ২ থেকে ইনডেক্স ৪ পর্যন্ত ট্রাফিক শর্তাবলী একই ছিল।

Maps SDK-এর মাধ্যমে ট্রাফিক-অ্যাওয়ার পলিলাইন রেন্ডার করা

আমরা সাজেস্ট করি যে আপনি যেন Google Maps SDK-এর মাধ্যমে অফার করা বিভিন্ন ফিচার ব্যবহার করে ম্যাপে ট্রাফিক-অ্যাওয়ার পলিলাইন দেখান। এর মধ্যে কাস্টম রঙ, স্ট্রোক এবং পলিলাইন স্ট্রেচ বরাবর প্যাটার্ন অন্তর্ভুক্ত। পলিলাইন ব্যবহার করার ব্যাপারে আরও জানতে, Android-এর জন্য পলিলাইন ফিচার এবং iOS-এর জন্য পলিলাইন ফিচার দেখুন।

পলিলাইন রেন্ডারিংয়ের উদাহরণ

Maps SDK-এর ব্যবহারকারীরা স্পিড ক্যাটেগরি ও পলিলাইন রেন্ডারিং স্কিমার মধ্যে কাস্টমাইজ করা ম্যাপিং লজিক নির্ধারণ করার সুযোগ পান। যেমন, কেউ ম্যাপে "স্বাভাবিক" গতিকে একটি মোটা নীল লাইন হিসেবে দেখানোর সিদ্ধান্ত নিতে পারেন, যেখানে "ধীর" গতিকে একটি মোটা কমলা লাইন হিসেবে দেখানো হতে পারে।

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

Android

Java

Polyline line = map.addPolyline(new PolylineOptions()
    .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734))
    .width(25)
    .color(Color.BLUE)
    .geodesic(true));

Kotlin

val line: Polyline = map.addPolyline(
  PolylineOptions()
    .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734))
    .width(25f)
    .color(Color.BLUE)
    .geodesic(true)
)

iOS

Objective-C

GMSMutablePath *path = [GMSMutablePath path];
[path addLatitude:-37.81319 longitude:144.96298];
[path addLatitude:-31.95285 longitude:115.85734];
GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
polyline.strokeWidth = 10.f;
polyline.strokeColor = .blue;
polyline.geodesic = YES;
polyline.map = mapView;

Swift

let path = GMSMutablePath()
path.addLatitude(-37.81319, longitude: 144.96298)
path.addLatitude(-31.95285, longitude: 115.85734)
let polyline = GMSPolyline(path: path)
polyline.strokeWidth = 10.0
polyline.geodesic = true
polyline.map = mapView

'রুট বরাবর সার্চ করুন' ফিচারের সাথে এনকোড করা পলিলাইন ব্যবহার করা

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

যেমন, যাত্রা শুরুর স্থান ও গন্তব্যের মধ্যে রুটে ক্যাফে খুঁজতে:

Node.js

const API_KEY = 'YOUR_API_KEY';
const routes_service = 'https://routes.googleapis.com/directions/v2:computeRoutes';
const textSearch_service = 'https://places.googleapis.com/v1/places:searchText';

function init(){ const routes_request = { "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "travelMode": "DRIVE" }; const textSearch_request = { "textQuery": "cafe", "searchAlongRouteParameters": { "polyline": { "encodedPolyline": "" } } }; fetchResources(routes_service,routes_request).then(routes => { textSearch_request.searchAlongRouteParameters.polyline.encodedPolyline = routes.routes[0].polyline.encodedPolyline; fetchResources(textSearch_service,textSearch_request).then(places => { console.log(places); }); }); } async function fetchResources(resource,reqBody){ const response = await fetch(resource, { method: 'POST', body: JSON.stringify(reqBody), headers: { 'Content-Type': 'application/json', 'X-Goog-Api-Key': API_KEY, 'X-Goog-FieldMask': '*' } }); const responseJSON = await response.json(); return responseJSON; } init();