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

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

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

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

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