Estoy tratando de probar el siguiente código en mi sistema pero no puedo obtener el resultado correcto.

  1. ¿Es este código correcto para usar geopy con GoogleV3?
  2. 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

  • ¿Qué resultado obtiene? ¿Está recibiendo un mensaje de error?
  • @MaryBeth Quiero devolver el nombre del país y continente (si es posible) para esa latitud.
  • " Estoy tratando de probar el siguiente código en mi sistema, pero no puedo obtener el resultado correcto. " ¿Qué resultado está recibiendo en comparación con lo que espera? Si recibe un error, publíquelo. De nuestro recorrido : Concéntrese en las preguntas sobre un problema real que haya enfrentado. Incluya detalles sobre lo que ha intentado y exactamente lo que está intentando hacer.
  • ¿Cuál es el valor de location, es decir, tiene el código geográfico inverso ¿Ha tenido éxito?

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. …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *