Încerc să testez următorul cod pe sistemul meu, dar nu pot obține rezultatul corect.

  1. Este acest cod corect pentru utilizarea geopy cu GoogleV3?
  2. Dacă deci, cum pot returna numele țării și continentului?

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 

Comentarii

  • Ce rezultat obțineți? Primești un mesaj de eroare?
  • @MaryBeth Vreau să returnez numele țării și continentului (dacă este posibil) pentru latul respectiv.
  • " Încerc să testez următorul cod pe sistemul meu, dar nu pot obține rezultatul corect. " Ce ieșire primiți față de ceea ce așteptați? Dacă primiți o eroare, vă rugăm să o postați. Din turul nostru : Concentrați-vă asupra întrebărilor despre o problemă reală cu care v-ați confruntat. Includeți detalii despre ceea ce ați încercat și exact ce încercați să faceți.
  • Care este valoarea location, adică are geocodul invers ați avut succes?

Răspundeți

Nu utilizați o comandă externă pentru a vă seta proxy-ul. Dacă sunteți activat Windows și proxy-ul dvs. sunt deja configurate în opțiunile dvs. de internet, nu trebuie deloc să îl configurați în script, acesta va fi detectat automat.

Dacă nu aveți deja un proxy configurat , puteți transmite proxy-ul direct la geocoder :

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

Sau puteți seta proxy-ul ca o variabilă de mediu fără o comandă externă:

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

Apoi puteți accesa adresa returnată cum ar fi:

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

Ieșire:

 13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany  

Dacă doriți să extrageți numele țării și codul poștal, aruncați o privire în location.raw dicționar. Componentele de răspuns sunt specificate în documentația API 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  

Rețineți că acest lucru este aplicabil doar geocoderului GoogleV3 și poate fi defectat dacă Google își modifică API-ul …

Notă – Google nu pare să se întoarcă numele continentului.

Comentarii

  • Vă mulțumim pentru ajutor. Am încercat să punem acest lucru în funcțiune săptămâni acum
  • Luke, unde este documentația pentru accesarea componentelor brute?
  • @dustin geopy.readthedocs.org discută despre raw dicționar
  • Mă uitam acolo, dar nu era ' suficient de detaliat pentru a înțelege. Nu puteam ' nu găsiți multe coduri poștale (coduri poștale) sau cum să le accesați, dacă este posibil.
  • ' este pentru că raw este doar răspunsul original din t serverul a fost analizat într-un dicționar python. Răspunsul de la fiecare API de geocodificare va fi diferit. Puteți utiliza tehnici standard de python pentru a-l inspecta, adică print, location.raw.keys(), dir(location.raw) etc. …

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *