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

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

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

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

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

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

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

একটি পলিলাইনকে একটি 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 হিসাবে, যার অর্থ জিওজেসন লাইনস্ট্রিং ফরম্যাট ব্যবহার করা হবে।

উদাহরণস্বরূপ, অনুরোধের মূল অংশে:

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'

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

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

উদাহরণস্বরূপ:

{
  "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-এর রীতি অনুসারে, ব্যবধানের মধ্যে start index-এর অনুপস্থিতি index 0-এর সমতুল্য।

startPolylinePointIndex এবং endPolylinePointIndex মানগুলো সবসময় পরপর হয় না। উদাহরণস্বরূপ:

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

এক্ষেত্রে, সূচক ২ থেকে সূচক ৪ পর্যন্ত যান চলাচলের অবস্থা একই ছিল।

Maps SDK ব্যবহার করে ট্র্যাফিক-সচেতন পলিলাইন রেন্ডার করুন

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

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

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

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

অ্যান্ড্রয়েড

জাভা

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

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

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

উদাহরণস্বরূপ, উৎস এবং গন্তব্যের মধ্যবর্তী পথে থাকা ক্যাফেগুলো ফেরত পেতে:

নোড.জেএস

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();