Estoy tratando de probar el siguiente código en mi sistema pero no puedo obtener el resultado correcto.
- ¿Es este código correcto para usar
geopy
conGoogleV3
? - Si Entonces, ¿cómo puedo devolver el nombre del país y del continente?
import subprocess from geopy.geocoders import GoogleV3 def set_proxy(proxy_addr): cmd = "set HTTPS_PROXY=" + proxy_addr call = subprocess.call(cmd, shell=True) cmd = "set HTTP_PROXY=" + proxy_addr call = subprocess.call(cmd, shell=True) set_proxy("my.proxy") api_key = "my key" geolocator = GoogleV3(api_key) location = geolocator.reverse("52.509669, 13.376294", timeout = 10) #would like to return just country and continent name
Comentarios
Responder
No use un comando externo para configurar su proxy. Si está en Windows y su proxy ya están configurados en sus opciones de Internet, no necesita configurarlo en el script en absoluto, se detectará automáticamente.
Si no tiene un proxy ya configurado , puede pasar el proxy directamente a el geocodificador :
geolocator = GoogleV3(api_key, proxies={"http": proxy_addr, "https": proxy_addr})
O puede configurar el proxy como una variable de entorno sin un comando externo:
os.environ["HTTP_PROXY"] = proxy_addr os.environ["HTTPS_PROXY"] = proxy_addr geolocator = GoogleV3(api_key)
Entonces puede acceder a la dirección devuelta como:
location = geolocator.reverse([52.509669, 13.376294], timeout = 10, exactly_one=True) print location.longitude,location.latitude,location.address
Resultado:
13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany
Si desea extraer el nombre del país y el código postal, eche un vistazo al location.raw
diccionario. Los componentes de la respuesta se especifican en la documentación de la API de Google .
from geopy.geocoders import GoogleV3 ################################################## # Some dummy values just so the script is # self contained and runnable api_key=None rows=[{"avg_lat":52.509669, "avg_lon":13.376294}] ################################################## def get_component(location, component_type): for component in location.raw["address_components"]: if component_type in component["types"]: return component["long_name"] geolocator = GoogleV3(api_key) for row in rows: location = geolocator.reverse((row["avg_lat"], row["avg_lon"]), timeout = 10, exactly_one=True) post_code = get_component(location, "postal_code") country = get_component(location, "country") print location.longitude,location.latitude,location.address print post_code,country
Tenga en cuenta que esto solo es aplicable al geocodificador GoogleV3 y está sujeto a roturas si Google cambia su API …
Nota: Google no parece regresar el nombre del continente.
Comentarios
- Gracias por la ayuda. He intentado que esto funcione hace semanas
- Luke, ¿Dónde está la documentación para acceder a los componentes sin procesar?
- @dustin geopy.readthedocs.org analiza el
raw
diccionario - Estaba buscando allí, pero no era ' t suficientemente detallado para que yo lo entendiera. No pude ' no encontrar mucho sobre códigos postales (códigos postales) o cómo acceder a ellos si es posible.
- Eso ' s porque
raw
es solo la respuesta original de t El servidor analizó en un diccionario de Python. La respuesta de cada API de codificación geográfica será diferente. Puede usar técnicas estándar de Python para inspeccionarlo, es decir,print
,location.raw.keys()
,dir(location.raw)
, etc. …
location
, es decir, tiene el código geográfico inverso ¿Ha tenido éxito?