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

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

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

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

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

पॉलीलाइन के बारे में ज़्यादा जानने के लिए, यह लेख पढ़ें:

किसी रास्ते, लेग या चरण के लिए बुनियादी पॉलीलाइन का अनुरोध करना

पॉलीलाइन को Polyline (REST) या Polyline (gRPC) ऑब्जेक्ट से दिखाया जाता है. जवाब में, रूट, लेग, और चरण के लेवल पर पॉलीलाइन दिखाई जा सकती है.

response field mask का इस्तेमाल करके, यह तय करें कि कौनसी पॉलीलाइन दिखानी है:

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

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

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