Ho bisogno di convertire le coordinate di longitudine e latitudine in entrambi i paesi o città, c'è un esempio di questo in Python?come convertire da longitudine e latitudine in paese o città?
grazie in anticipo!
Ho bisogno di convertire le coordinate di longitudine e latitudine in entrambi i paesi o città, c'è un esempio di questo in Python?come convertire da longitudine e latitudine in paese o città?
grazie in anticipo!
Io uso l'API di Google.
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))
uscita:
(u'Hartfield', u'United Kingdom')
(u'Edenbridge', u'United Kingdom')
(u'Sevenoaks', u'United Kingdom')
Questo è chiamato il geocoding inverso. C'è una libreria ho potuto trovare in Python, che si concentra su questo: https://github.com/thampiman/reverse-geocoder
Alcune questioni connesse con altre idee:
In generale l'API di Google è l'approccio migliore Non era adatto per il mio caso perché dovevo elaborare molte voci e l'api è lento.
Ho codificato una versione piccola che fa lo stesso ma scarica prima una geometria enorme e calcola i paesi sulla macchina.
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
questa estensione pip è anche interessante, forse non così accurata in quanto si basa su qualche punto di riferimento e fa qualche interpolazione: https://pypi.python.org/pypi/reverse_geocode/1.0 – linqu
questo è fantastico, c'è un modo pulito per prelevare città e paese senza utilizzare split? – godzilla
Sì, ho rivisto la mia risposta per restituire la città e il paese –
questo funziona bene, tuttavia esiste un modo per farlo localmente? una sorta di API, la latenza è un enorme collo di bottiglia per ciò che sto cercando di fare – godzilla