Jessaie de tester le code suivant sur mon système mais je ne parviens pas à obtenir la sortie correcte.

  1. Ce code est-il correct pour utiliser geopy avec GoogleV3?
  2. Si alors, comment puis-je renvoyer le nom du pays et du continent?

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 

Commentaires

  • Quel résultat obtenez-vous? Recevez-vous un message derreur?
  • @MaryBeth Je souhaite renvoyer le nom du pays et du continent (si possible) pour cette lat.
  • " Jessaye de tester le code suivant sur mon système mais je ne parviens pas à obtenir la sortie correcte. " Quelle sortie recevez-vous par rapport à ce que vous attendez? Si vous recevez une erreur, veuillez la poster. De notre visite : Concentrez-vous sur des questions concernant un problème réel auquel vous avez été confronté. Incluez des détails sur ce que vous avez essayé et exactement ce que vous essayez de faire.
  • Quelle est la valeur de location, cest-à-dire a le géocode inversé réussi?

Réponse

Nutilisez pas de commande externe pour définir votre proxy. Si vous êtes sur Windows et votre proxy sont déjà configurés dans vos options Internet, vous navez pas du tout besoin de le configurer dans le script, il sera détecté automatiquement.

Si vous navez pas de proxy déjà configuré , vous pouvez transmettre le proxy directement à le géocodeur :

 geolocator = GoogleV3(api_key, proxies={"http": proxy_addr, "https": proxy_addr})  

Ou vous pouvez définir le proxy comme variable denvironnement sans commande externe:

 os.environ["HTTP_PROXY"] = proxy_addr os.environ["HTTPS_PROXY"] = proxy_addr geolocator = GoogleV3(api_key)  

Ensuite, vous pouvez accéder à ladresse renvoyée comme:

 location = geolocator.reverse([52.509669, 13.376294], timeout = 10, exactly_one=True) print location.longitude,location.latitude,location.address  

Sortie:

 13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany  

Si vous souhaitez extraire le nom du pays et le code postal, regardez dans le location.raw dictionnaire. Les composants de la réponse sont spécifiés dans la documentation de lAPI 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  

Notez que cela sapplique uniquement au géocodeur GoogleV3 et peut être cassé si Google modifie son API …

Remarque – Google ne semble pas revenir le nom du continent.

Commentaires

  • Merci pour laide. Jessaie de faire en sorte que cela fonctionne des semaines maintenant
  • Luke, où se trouve la documentation pour accéder aux composants bruts?
  • @dustin geopy.readthedocs.org traite de la raw dictionnaire
  • Je cherchais là-bas, mais ce nétait ' t suffisamment verbeux pour que je puisse comprendre. Je ne pouvais ' t trouver beaucoup sur les codes postaux (codes postaux) ou comment y accéder si possible.
  • Cela ' car raw est juste la réponse originale de t Le serveur a analysé dans un dictionnaire python. La réponse de chaque API de géocodage sera différente. Vous pouvez utiliser des techniques python standard pour linspecter, cest-à-dire print, location.raw.keys(), dir(location.raw) etc. …

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *