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

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

  • बुनियादी पॉलीलाइन (डिफ़ॉल्ट), किसी रास्ते को दिखाती है. हालांकि, इसमें पॉलीलाइन में एम्बेड की गई ट्रैफ़िक की जानकारी नहीं होती. बुनियादी पॉलीलाइन दिखाने वाले अनुरोधों के लिए, Routes के बुनियादी शुल्क का हिसाब लगाया जाता है. Routes API के लिए, बिलिंग के बारे में ज़्यादा जानें.

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

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

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 से टेक्स्ट से खोजने के अनुरोध में पास किया जाता है. इसके बाद, रिस्पॉन्स में ऐसी जगहें शामिल होती हैं जो खोज के लिए तय की गई शर्तों से मेल खाती हैं और तय किए गए रास्ते के आस-पास हैं. ज़्यादा जानकारी के लिए, किसी रास्ते पर खोजें लेख पढ़ें.

उदाहरण के लिए, यात्रा शुरू करने की जगह और मंज़िल के बीच के रास्ते पर मौजूद कैफ़े देखने के लिए:

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