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

पॉलीलाइन एन्कोडिंग एक लॉस कंप्रेशन एल्गोरिदम है. इससे आपको कई तरह के कोऑर्डिनेट को स्टोर करने की सुविधा मिलती है, जैसे कि रूट को एक स्ट्रिंग के तौर पर सेव करना. कोड में बदलने का तरीका, base64 एन्कोडिंग स्कीम का इस्तेमाल करके, ASCII वर्णों के लिए एक बाइनरी वैल्यू को वर्ण कोड की सीरीज़ में बदल देता है. कोड में बदलने की प्रोसेस की पूरी जानकारी के लिए, एन्कोड किया गया पॉलीलाइन एल्गोरिदम फ़ॉर्मैट देखें.

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

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

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

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

रास्ते, पैर या कदम के लिए सामान्य पॉलीलाइन का अनुरोध करें

पॉलीलाइन को पॉलीलाइन (REST) या पॉलीलाइन (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"
      }
    }
  ]
}

पॉलीलाइन एन्कोडिंग प्रकार कॉन्फ़िगर करें

पॉलीलाइन टाइप को कंट्रोल करने के लिए, 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'

ट्रैफ़िक की जानकारी देने वाले पॉलीलाइन का अनुरोध करें

सभी के ऊपर दिखाए गए उदाहरण, बुनियादी पॉलीलाइन दिखाते हैं, यानी कि ट्रैफ़िक की जानकारी के बिना पॉलीलाइन. इसके अलावा, आप यह भी अनुरोध कर सकते हैं कि पॉलीलाइन में रास्ते और रास्ते की हर मोड़ के लिए ट्रैफ़िक की जानकारी शामिल हो.

ट्रैफ़िक की जानकारी देने वाली पॉलीलाइन में रास्ते में पड़ने वाले ट्रैफ़िक की स्थिति की जानकारी होती है. ट्रैफ़िक की स्थितियों को रिस्पॉन्स पॉलीलाइन के दिए गए इंटरवल के लिए स्पीड कैटगरी (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'

ट्रैफ़िक की जानकारी देने वाली पॉलीलाइन के जवाब का उदाहरण

इस रिस्पॉन्स में, ट्रैफ़िक डेटा को पॉलीलाइन में एन्कोड किया जाता है. साथ ही, यह RouteLegTravelAdvisory ऑब्जेक्ट (हर लेग) और RouteTravelAdvisory ऑब्जेक्ट (रूट) टाइप के travelAdvisory फ़ील्ड में शामिल होता है.

उदाहरण के लिए:

{
  "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