computeRoutes পদ্ধতি (REST) এবং ComputeRoutes পদ্ধতি (gRPC) উভয়ই প্রতিক্রিয়ার অংশ হিসাবে একটি পলিলাইন দ্বারা উপস্থাপিত রুটটি ফেরত দেয়। এই API গুলি দুটি ধরণের পলিলাইন ফেরত দেয়:
বেসিক পলিলাইন (ডিফল্ট) , একটি রুট প্রতিনিধিত্ব করে কিন্তু পলিলাইনে এম্বেড করা ট্র্যাফিক তথ্য ছাড়াই। যে অনুরোধগুলি একটি বেসিক পলিলাইন ফেরত দেয় সেগুলি রুটস বেসিক হারে বিল করা হয়। রুটস API এর জন্য বিলিং সম্পর্কে আরও জানুন ।
ট্র্যাফিক-সচেতন পলিলাইন , রুটের ট্র্যাফিক পরিস্থিতি সম্পর্কে তথ্য ধারণ করে। ট্র্যাফিক পরিস্থিতি গতির বিভাগ (
NORMAL,SLOW,TRAFFIC_JAM) অনুসারে প্রকাশ করা হয় যা পলিলাইনের একটি নির্দিষ্ট ব্যবধানে প্রযোজ্য। ট্র্যাফিক-সচেতন পলিলাইনের জন্য অনুরোধগুলি রুট পছন্দের হারে বিল করা হয়। রুট API এর জন্য বিলিং সম্পর্কে আরও জানুন । বিস্তারিত জানার জন্য, পলিলাইনের মান কনফিগার করুন দেখুন।
পলিলাইন সম্পর্কে আরও জানতে, দেখুন:
ইন্টারেক্টিভ পলিলাইন এনকোডার ইউটিলিটি আপনাকে একটি UI-তে এনকোডেড পলিলাইন তৈরি করতে বা মানচিত্রে প্রদর্শনের জন্য পলিলাইন ডিকোড করতে দেয়। উদাহরণস্বরূপ, নীচের কোড দ্বারা তৈরি একটি পলিলাইন ডিকোড করতে এই ইউটিলিটিটি ব্যবহার করুন।
রুট, লেগ বা ধাপের জন্য একটি মৌলিক পলিলাইনের অনুরোধ করুন
একটি পলিলাইন একটি পলিলাইন (REST) বা পলিলাইন (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 LineString ফর্ম্যাট ব্যবহার করা হবে।
উদাহরণস্বরূপ, অনুরোধের মূল অংশে:
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 ) অনুসারে প্রকাশ করা হয়। ব্যবধানগুলি তাদের শুরু (সমেত) এবং শেষ (এক্সক্লুসিভ) পলিলাইন পয়েন্টের সূচক দ্বারা সংজ্ঞায়িত করা হয়।
 উদাহরণস্বরূপ, নিম্নলিখিত প্রতিক্রিয়াটি পললাইন পয়েন্ট 2 এবং 4 এর মধ্যে NORMAL ট্র্যাফিক দেখায়:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
ট্র্যাফিক-সচেতন পলিলাইন গণনা করার জন্য অনুরোধ করতে, অনুরোধে নিম্নলিখিত বৈশিষ্ট্যগুলি সেট করুন:
ট্রাফিক গণনা সক্ষম করতে
extraComputationsঅ্যারে ক্ষেত্রটিTRAFFIC_ON_POLYLINEতে সেট করুন।travelModeDRIVEঅথবাTWO_WHEELERএ সেট করুন। অন্য যেকোনো travel mode এর জন্য অনুরোধ করলে একটি ত্রুটি দেখাবে।অনুরোধে
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 অনুশীলন অনুসারে সূচক 0 এর সাথে মিলে যায়।
 startPolylinePointIndex এবং endPolylinePointIndex মান সবসময় ধারাবাহিক হয় না। উদাহরণস্বরূপ: 
{
  "startPolylinePointIndex": 2,
  "endPolylinePointIndex": 4,
  "speed": "NORMAL"
}
এই ক্ষেত্রে, ট্র্যাফিকের অবস্থা সূচক ২ থেকে সূচক ৪ পর্যন্ত একই ছিল।
Maps SDK ব্যবহার করে ট্রাফিক-সচেতন পলিলাইন রেন্ডার করুন
আমরা গুগল ম্যাপস SDK-এর বিভিন্ন বৈশিষ্ট্য ব্যবহার করে মানচিত্রে ট্র্যাফিক সচেতন পলিলাইন প্রদর্শনের পরামর্শ দিচ্ছি, যার মধ্যে রয়েছে কাস্টম রঙ, স্ট্রোক এবং পলিলাইন প্রসারিত অংশের প্যাটার্ন। পলিলাইন ব্যবহার সম্পর্কে আরও তথ্যের জন্য, অ্যান্ড্রয়েডের জন্য পলিলাইন বৈশিষ্ট্য এবং iOS এর জন্য পলিলাইন বৈশিষ্ট্য দেখুন।
পলিলাইন রেন্ডারিংয়ের উদাহরণ
Maps SDK ব্যবহারকারীরা গতি বিভাগ এবং পলিলাইন রেন্ডারিং স্কিমার মধ্যে একটি কাস্টমাইজড ম্যাপিং লজিক সংজ্ঞায়িত করার সুযোগ পান। উদাহরণস্বরূপ, কেউ মানচিত্রে "স্বাভাবিক" গতিকে একটি ঘন নীল রেখা হিসাবে প্রদর্শন করার সিদ্ধান্ত নিতে পারেন এবং "ধীর" গতিকে একটি ঘন কমলা রেখা হিসাবে প্রদর্শিত হতে পারে, উদাহরণস্বরূপ।
নিম্নলিখিত স্নিপেটগুলি মেলবোর্ন থেকে পার্থ পর্যন্ত জিওডেসিক অংশ সহ একটি ঘন নীল পলিলাইন যুক্ত করে। আরও তথ্যের জন্য, উপস্থিতি কাস্টমাইজ করা (অ্যান্ড্রয়েডের জন্য) এবং পলিলাইন কাস্টমাইজ করুন (আইওএসের জন্য) দেখুন।
অ্যান্ড্রয়েড
জাভা
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));
কোটলিন
val line: Polyline = map.addPolyline( PolylineOptions() .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734)) .width(25f) .color(Color.BLUE) .geodesic(true) )
আইওএস
অবজেক্টিভ-সি
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;
সুইফট
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 Text Search ব্যবহার করুন। আপনি Routes API Compute Routes থেকে একটি পূর্ব-গণনাকৃত রুটের এনকোডেড পলিলাইনটি Text Search অনুরোধে পাস করেন। এরপর প্রতিক্রিয়ায় এমন স্থানগুলি থাকে যা অনুসন্ধানের মানদণ্ডের সাথে মেলে এবং নির্দিষ্ট রুটের কাছাকাছিও অবস্থিত। বিস্তারিত জানার জন্য, একটি রুট বরাবর অনুসন্ধান দেখুন।
উদাহরণস্বরূপ, উৎপত্তিস্থল এবং গন্তব্যস্থলের মধ্যবর্তী রুটে ক্যাফে ফেরত পাঠানোর জন্য:
নোড.জেএস
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();