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

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

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

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

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

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

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

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

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

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

Maps SDK टूल की मदद से, ट्रैफ़िक के बारे में जानकारी देने वाली पॉलीलाइन रेंडर करें

हमारा सुझाव है कि आप Google Maps SDK टूल की दी गई अलग-अलग सुविधाओं का इस्तेमाल करके, मैप पर ट्रैफ़िक की जानकारी देने वाली पॉलीलाइन दिखाएं. इन सुविधाओं में, पॉलीलाइन के हिस्सों के साथ कस्टम रंग, स्ट्रोक, और पैटर्न शामिल हैं. पॉलीलाइन का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Android के लिए पॉलीलाइन की सुविधाएं और iOS के लिए पॉलीलाइन की सुविधाएं देखें.

पॉलीलाइन रेंडरिंग का उदाहरण

Maps SDK टूल का इस्तेमाल करने वाले लोग, पसंद के मुताबिक मैपिंग तय कर सकते हैं स्पीड कैटगरी और पॉलीलाइन रेंडरिंग स्कीमा के बीच लॉजिक. इस तौर पर उदाहरण के लिए, कोई व्यक्ति "NORMAL" दिखाने का फ़ैसला ले सकता है जैसे कि चौड़ी नीले रंग की लाइन "धीमा" होने पर मैप उदाहरण के लिए, स्पीड को एक मोटी नारंगी रेखा के रूप में दिखाया जा सकता है.

नीचे दिए गए स्निपेट यहां से जियोडेसिक सेगमेंट के साथ मोटी नीली पॉलीलाइन जोड़ते हैं मेलबर्न से पर्थ. ज़्यादा जानकारी के लिए, यह देखें थीम को पसंद के मुताबिक बनाना (Android के लिए) और Polyline को पसंद के मुताबिक बनाएं (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