GeoPy जियोकोडर से व्यक्तिगत पता घटकों (शहर, राज्य, आदि) को कैसे लौटाएं?


10

मैं जियोकोड का उपयोग करके जियोकोड पते का उपयोग करने के लिए lat, lng कर रहा हूं। मैं प्रत्येक पते के लिए आइटम पते वाले घटकों (सड़क, शहर, राज्य, ज़िप) को भी निकालना चाहूंगा।

जियोनी पते के साथ एक स्ट्रिंग लौटाता है - लेकिन मुझे प्रत्येक घटक को अलग करने का एक विश्वसनीय तरीका नहीं मिल रहा है। उदाहरण के लिए:

{street: '123 Main Street', city: 'Los Angeles', state: 'CA', zip: 90034, country: 'USA'}

Google जियोकोडिंग एपीआई इन व्यक्तिगत घटकों को वापस करता है ... क्या जियोपी से इन्हें प्राप्त करने का कोई तरीका है? (या एक अलग जियोकोडिंग उपकरण?)

जवाबों:


8

लुबर, मैंने आपका पोस्ट स्टैक ओवरफ्लो में देखा था, लेकिन स्थिरता के लिए यहां एक समान उत्तर पोस्ट करने जा रहा हूं। यह एक अच्छा सवाल है। मैं पता सत्यापन उद्योग में काम करता हूं और इससे पहले आपकी तरह की समस्या से निपट चुका हूं।

मैं एक टिप्पणी में इस ढेर अतिप्रवाह सवाल से जुड़ा ; और यह जानना महत्वपूर्ण है कि पूर्ण फ्रीफ़ॉर्म स्ट्रीट पतों के प्रारूप के बारे में वास्तव में कोई गारंटी नहीं है। जैसा कि लिंक्ड पोस्ट में बताया गया है, पूर्ण पते इनमें से किसी भी तरह दिख सकते हैं:

1) 102 मुख्य सड़क एनीटाउन, राज्य

2) 400n 600e # 2, 52173

3) पो # 104 60203

4) 1234 LKSDFJlkjsdflkjsdljf #asdf 12345

5) 205 1105 14 90210

(कारणों को लिंक किए गए पोस्ट में समझाया गया है।) मुझे पता है कि जियोपी एक निश्चित प्रारूप में पते देता है - उपयोग किए गए जियोकोडर के आधार पर (जो परिणामस्वरूप प्रारूप जियोपी के नियंत्रण से बाहर है), लेकिन पते एक निश्चित सीमा के भीतर सभी तरह के तरीके देख सकते हैं। घटक (जैसे अल्पविराम), और यह जानना महत्वपूर्ण है कि मानकीकृत पते में अल्पविराम नहीं हैं (यूएसपीएस पब्लिकेशन 28 के अनुसार)।

मैंने हाल ही में LiveAddress नामक एक एपीआई पर काम करने में मदद की ; इसे सिर्फ जियोकोडिंग और सिंगल-लाइन एड्रेस पार्सिंग को सपोर्ट करने के लिए अपग्रेड किया गया था।

जियोपी को जियोकोड के लिए डिज़ाइन किया गया है, घटकों में पार्स नहीं (यह कार्य वास्तव में उन कारणों से वास्तव में मुश्किल है जो मुझे यहाँ नहीं मिलेंगे)। LiveAddress , हालांकि, पते को संक्षिप्त करेगा और निर्देशांक और पते के बारे में अन्य जानकारी लौटाएगा, और केवल तभी पते वास्तविक होंगे; कोई "अनुमान नहीं" परिणाम।

पायथन का उपयोग करने वाले घटकों में एकल-पंक्ति पते को पार्स करने के लिए, बस पूरे पते को "सड़क" फ़ील्ड में डालें:

import json
import pprint
import urllib

LOCATION = 'https://api.smartystreets.com/street-address/'
QUERY_STRING = urllib.urlencode({ # entire query sting must be URL-Encoded
    'auth-token': r'YOUR_API_KEY_HERE',
    'street': '1 infinite loop cupertino ca 95014'
})
URL = LOCATION + '?' + QUERY_STRING

response = urllib.urlopen(URL).read()
structure = json.loads(response)
pprint.pprint(structure)

परिणामी JSON ऑब्जेक्ट में एक componentsऑब्जेक्ट होगा जो कुछ इस तरह दिखाई देगा:

"components": {
        "primary_number": "1",
        "street_name": "Infinite",
        "street_suffix": "Loop",
        "city_name": "Cupertino",
        "state_abbreviation": "CA",
        "zipcode": "95014",
        "plus4_code": "2083",
        "delivery_point": "01",
        "delivery_point_check_digit": "7"
}

प्रतिक्रिया में संयुक्त first_line और delivery_line_2 भी शामिल होंगे, ताकि आपको ज़रूरत पड़ने पर मैन्युअल रूप से उन लोगों से संपर्क न करना पड़े।


एक और एक एपीआई हो सकता है address-parser.net/try.php
SIslam

3

अपनी जसन फ़ाइल लिखना कठिन नहीं है।

import json

result = '123 Main Street, Los Angeles, CA, 90034, USA'

sp = result.split(',')
dumpJson = json.dumps({'street':sp[0], 'city': sp[1], 'state': sp[2], 
                      'zip': sp[3], 'country': sp[4]})


>>> dumpJson
'{"city": " Los Angeles", "state": " CA", "street": "123 Main Street", 
          "zip": " 90034", "country": " USA"}'

मुझे उम्मीद है इससे आपको मदद मिली होगी...


1
मुझे इसे कम करना है, इसलिए नहीं कि इरादा अच्छा नहीं है, लेकिन क्योंकि कोई गारंटी नहीं है कि पते के घटकों को अल्पविराम के साथ सीमांकित किया गया है। इस सवाल को स्टैक ओवरफ्लो में घटकों में एकल-पंक्ति पते को पार्स करने के बारे में देखें । हालांकि जियोपी एक निश्चित प्रारूप लौटा सकता है, मानकीकृत पते में अल्पविराम नहीं होते हैं।
मैट

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

2
जब मैंने डाउन बटन पर क्लिक किया, तो उसने सुझाव दिया कि मैं उत्तर को बेहतर बनाने में मदद करने के लिए एक टिप्पणी छोड़ता हूं, इसलिए मैंने किया। मेरा तात्पर्य यह नहीं था कि आपका उत्तर असहाय-उपयोगी है या यहाँ नहीं है; यह निश्चित रूप से समुदाय के लिए मूल्य जोड़ता है! यह एक सरल उपाय है कि अन्य लोग संभवतः इसी तरह की समस्याओं के लिए अनदेखी करेंगे। मुझे यकीन है कि अन्य इसे उपयोगी पाएंगे।
मैट

यहाँ सिर्फ टिप्पणी करने के लिए - सवाल का अच्छा जवाब। इस उत्तर की गुणवत्ता को लागू करने का एक तरीका एक पंक्ति में संख्या की एक विशिष्ट लंबाई की पहचान करने के लिए एक regex होगा - जैसा कि एक ज़िपकोड के लिए अपेक्षित है। बस मेरा 2 सी।
जेसन मी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.