2013-11-24 5 views
8

मुझे देश या शहर में देशांतर और अक्षांश समन्वय को परिवर्तित करने की आवश्यकता है, क्या इसका पाइथन में एक उदाहरण है?देश या शहर से देशांतर और अक्षांश से कैसे परिवर्तित करें?

अग्रिम धन्यवाद!

उत्तर

19

मैं गूगल के एपीआई का उपयोग करें।

from urllib2 import urlopen 
import json 
def getplace(lat, lon): 
    url = "http://maps.googleapis.com/maps/api/geocode/json?" 
    url += "latlng=%s,%s&sensor=false" % (lat, lon) 
    v = urlopen(url).read() 
    j = json.loads(v) 
    components = j['results'][0]['address_components'] 
    country = town = None 
    for c in components: 
     if "country" in c['types']: 
      country = c['long_name'] 
     if "postal_town" in c['types']: 
      town = c['long_name'] 
    return town, country 


print(getplace(51.1, 0.1)) 
print(getplace(51.2, 0.1)) 
print(getplace(51.3, 0.1)) 

आउटपुट:

(u'Hartfield', u'United Kingdom') 
(u'Edenbridge', u'United Kingdom') 
(u'Sevenoaks', u'United Kingdom') 
+0

यह बहुत अच्छा है, क्या विभाजन का उपयोग किये बिना शहर और देश को चुनने का एक साफ तरीका है? – godzilla

+0

हां, मैंने शहर और देश –

+0

लौटने के लिए अपना जवाब संशोधित किया है, यह ठीक काम करता है, हालांकि क्या यह स्थानीय रूप से करने का एक तरीका है? किसी प्रकार की कोई API, विलंबता क्या मैं – godzilla

1

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

मुझे लगता है कि एक ही करता है, लेकिन पहले एक विशाल ज्यामिति डाउनलोड करता है और मशीन पर देशों की गणना करता है एक छोटा संस्करण कोडित।

from shapely.geometry import mapping, shape 
from shapely.prepared import prep 
from shapely.geometry import Point 


data = requests.get("https://raw.githubusercontent.com/datasets/geo-countries/master/data/countries.geojson").json() 

countries = {} 
for feature in data["features"]: 
    geom = feature["geometry"] 
    country = feature["properties"]["ADMIN"] 
    countries[country] = prep(shape(geom)) 

print(len(countries)) 

def get_country(lon, lat): 
    point = Point(lon, lat) 
    for country, geom in countries.iteritems(): 
     if geom.contains(point): 
      return country 

    return "unknown" 

print(get_country(10.0, 47.0)) 
# Austria 
+0

इस पिप विस्तार के रूप में यह कुछ संदर्भ बिंदु पर आधारित है भी दिलचस्प है, शायद नहीं तो सही है और कुछ प्रक्षेप करता है: https://pypi.python.org/pypi/reverse_geocode/1.0 – linqu

संबंधित मुद्दे