computeRoutes तरीके (REST) और the 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" } } ] }
पॉलीलाइन की क्वालिटी
पॉलीलाइन की क्वालिटी को इन शब्दों में बताया जा सकता है:
पॉइंट की फ़्लोटिंग-पॉइंट प्रिसिशन
पॉइंट को अक्षांश और देशांतर की वैल्यू के तौर पर दिखाया जाता है. इन्हें सिंगल-प्रिसिशन फ़्लोटिंग-पॉइंट फ़ॉर्मैट में दिखाया जाता है. यह छोटी वैल्यू के लिए सही काम करता है. हालांकि, फ़्लोटिंग-पॉइंट राउंडिंग की गड़बड़ियों की वजह से, वैल्यू बढ़ने पर प्रिसिशन कम हो जाती है.
पॉलीलाइन बनाने वाले पॉइंट की संख्या
ज़्यादा पॉइंट होने पर, पॉलीलाइन ज़्यादा स्मूद दिखती है. खास तौर पर, घुमावदार रास्तों के लिए.
पॉलीलाइन के एन्कोडिंग टाइप को कॉन्फ़िगर करना
पॉलीलाइन के टाइप को कंट्रोल करने के लिए, polylineEncoding अनुरोध के विकल्प का इस्तेमाल करें.
polylineEncoding प्रॉपर्टी से यह कंट्रोल किया जाता है कि पॉलीलाइन को
ENCODED_POLYLINE (डिफ़ॉल्ट) के तौर पर एनकोड किया जाएगा या
GEO_JSON_LINESTRING के तौर पर.
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 के उपयोगकर्ताओं के पास, स्पीड कैटगरी और पॉलीलाइन रेंडरिंग स्कीमा के बीच, पसंद के मुताबिक मैपिंग लॉजिक तय करने का विकल्प होता है. उदाहरण के लिए, "NORMAL" स्पीड को मैप पर नीले रंग की मोटी लाइन के तौर पर दिखाया जा सकता है. वहीं, "SLOW" स्पीड को नारंगी रंग की मोटी लाइन के तौर पर दिखाया जा सकता है.
यहां दिए गए स्निपेट, मेलबर्न से पर्थ तक जियोडेसिक सेगमेंट वाली नीले रंग की मोटी पॉलीलाइन जोड़ते हैं. ज़्यादा जानकारी के लिए, दिखने के तरीके को पसंद के मुताबिक बनाना (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();