गाइड

लूप लिखे बिना निर्देशांकों की सूची को रिवर्स जियोकोड करें

अगर आपके पास अक्षांश और देशांतर के जोड़ों की एक टेबल है और एक स्क्रिप्ट जो हर पंक्ति के लिए एक बार API को कॉल करती है, तो आप लुकअप के लिए नहीं, बल्कि आने-जाने के चक्करों के लिए कीमत चुका रहे हैं। रिवर्स जियोकोडिंग एंडपॉइंट फ़ॉरवर्ड एंडपॉइंट की तरह ही बल्क POST बॉडी लेता है और हर जोड़े को एक ही कॉल में हल करता है।

निर्देशांक के जोड़े भेजना

हर बिंदु के लिए एक GET अनुरोध के बजाय, /v1/reverse को निर्देशांक ऑब्जेक्ट का एक array भेजें। हर आइटम अपना पता लौटाता है, उसी क्रम में जिसमें वह भेजा गया था।

POST /v1/reverse
Content-Type: application/json

[{"lat": 48.8584, "lon": 2.2945}, {"lat": 40.6892, "lon": -74.0445}]
{
  "status": "ok",
  "results": [
    {"formatted": "Champ de Mars, Paris, France", "lat": 48.8584, "lon": 2.2945, "type": "address", "precision": "street", "confidence": 0.9, "place_id": "gh789", "components": {}},
    {"formatted": "Liberty Island, New York, NY", "lat": 40.6892, "lon": -74.0445, "type": "address", "precision": "street", "confidence": 0.88, "place_id": "jk012", "components": {}}
  ]
}

यह लूप से बेहतर क्यों है

हर निर्देशांक के लिए एक HTTP अनुरोध भेजने वाला लूप हर पंक्ति के लिए कनेक्शन का अतिरिक्त बोझ जोड़ता है और आपके दैनिक कोटा का हिसाब रखना कठिन बना देता है, क्योंकि आप एक के बजाय सैकड़ों अलग-अलग रिस्पॉन्स पर हेडर गुज़रते देख रहे होते हैं। एक बल्क कॉल भी प्रति आइटम एक अनुरोध गिनती है, इसलिए आपके कोटा पर कुल लागत बिल्कुल वही रहती है, लेकिन आपको पढ़ने के लिए कोटा हेडर का एक सेट और त्रुटियाँ पकड़ने के लिए एक जगह मिलती है।

रिस्पॉन्स पढ़ना

array का हर परिणाम उसी स्थान पर भेजे गए निर्देशांक से मेल खाता है। अगर कोई बिंदु ऐसी जगह पड़ता है जहाँ पास में कोई पता नहीं है, जैसे खुला पानी या कोई बड़ा बिना मैप किया क्षेत्र, तो त्रुटि के बजाय कम कॉन्फ़िडेंस स्कोर या मोटे प्रिसिज़न मान की उम्मीद करें, इसलिए ग्राहक को दिखने वाली किसी भी चीज़ में फ़ॉर्मैट किया गया पता उपयोग करने से पहले दोनों फ़ील्ड जाँचें।

दूसरा उदाहरण: समय क्षेत्र डेटा के साथ जोड़ना

निर्देशांकों की सूची के पते मिल जाने के बाद एक आम अगला कदम यह पता करना है कि हर जगह पर अभी क्या समय है। परिणामों पर दूसरी बार लूप चलाने के बजाय, उसी निर्देशांक सूची को अपने अलग बल्क अनुरोध के रूप में /v1/timezone को भेजें। आपके पास दो मेल खाते array होंगे, /v1/reverse से पते और /v1/timezone से समय क्षेत्र पहचानकर्ता, दोनों मूल पंक्ति क्रम में, और लागत होगी प्रति एंडपॉइंट प्रति बिंदु एक अनुरोध।

एक गलती जिससे बचना चाहिए

भेजने से पहले यह न मानें कि आपकी टेबल का हर निर्देशांक वैध है। -90 से 90 के बाहर का अक्षांश या -180 से 180 के बाहर का देशांतर, जो स्प्रेडशीट में कॉलम आपस में बदल जाने पर जितना होना चाहिए उससे ज़्यादा बार होता है, फिर भी एक अनुरोध के रूप में गिना जाता है, भले ही वह कोई समझदार परिणाम नहीं लौटा सकता। बैच भेजने से पहले अपने कोड में सीमाओं की बुनियादी जाँच करें, बजाय ऐसे लुकअप के लिए भुगतान करने के जो कभी सफल होने वाला ही नहीं था।

अपने बैच का आकार तय करना

पूरी डेटाबेस टेबल एक ही अनुरोध में भेजने की ज़रूरत नहीं है। निर्देशांकों को अपनी स्क्रिप्ट की मेमोरी और टाइमआउट सीमाओं के हिसाब से आकार वाले बैच में बाँटें, और ट्रैक रखें कि हर बैच मुफ़्त दैनिक कोटा या आपके क्रेडिट बैलेंस में से कितने अनुरोध उपयोग करता है। हर रिस्पॉन्स पर X-Quota-Used और X-Quota-Free-Remaining हेडर अगला बैच भेजने से पहले ठीक-ठीक बताते हैं कि आप कहाँ हैं।

इस तरह पूरी सूची को रिवर्स जियोकोड करने से जो पहले एक धीमा लूप था, वह प्रति बैच एक अनुरोध बन जाता है, और API दोनों तरह से प्रति आइटम वही काम करता है। अनुरोध और रिस्पॉन्स का पूरा विवरण रिवर्स जियोकोडिंग दस्तावेज़ में है।