रूट पॉलीलाइन के लिए अनुरोध करें

यूरोपियन इकनॉमिक एरिया (ईईए) के डेवलपर

computeRoutes तरीका (REST) और ComputeRoutes तरीका (gRPC), दोनों ही जवाब के तौर पर पॉलीलाइन से दिखाए गए रास्ते की जानकारी दिखाते हैं. ये एपीआई दो तरह की पॉलीलाइन दिखाते हैं:

  • बेसिक पॉलीलाइन (डिफ़ॉल्ट), यह किसी रास्ते को दिखाती है. हालांकि, इसमें ट्रैफ़िक की जानकारी शामिल नहीं होती. बेसिक पॉलीलाइन दिखाने वाले अनुरोधों के लिए, 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 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 पर सेट करें.

  • 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, और उससे जुड़ी स्पीड कैटगरी के हिसाब से बताया जाता है. ध्यान दें कि इंटरवल में स्टार्ट इंडेक्स न होने का मतलब है कि इंडेक्स 0 है. ऐसा proto3 के तरीकों के मुताबिक होता है.

startPolylinePointIndex और endPolylinePointIndex वैल्यू हमेशा लगातार नहीं होती हैं. उदाहरण के लिए:

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

इस मामले में, इंडेक्स 2 से इंडेक्स 4 तक ट्रैफ़िक का हाल एक जैसा था.

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