Sto provando a testare il seguente codice sul mio sistema ma non riesco a ottenere loutput corretto.

  1. Questo codice è corretto per lutilizzo di geopy con GoogleV3?
  2. Se quindi, come posso restituire il nome del paese e 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 

Commenti

  • Che output stai ottenendo? Hai ricevuto un messaggio di errore?
  • @MaryBeth Voglio restituire il nome del paese e del continente (se possibile) per quel lat long.
  • " Sto provando a testare il seguente codice sul mio sistema ma non riesco a ottenere loutput corretto. " Quale output stai ricevendo rispetto a quello che ti aspetti? Se ricevi un errore, pubblicalo. Dal nostro tour : Concentrati sulle domande su un problema reale che hai affrontato. Includi dettagli su ciò che hai provato e su ciò che stai cercando di fare.
  • Qual è il valore di location, cioè ha il geocodice inverso riuscito?

Risposta

Non utilizzare un comando esterno per impostare il proxy. Se sei su Windows e il tuo proxy sono già impostati nelle tue opzioni Internet, non è necessario impostarlo nello script, verrà rilevato automaticamente.

Se non hai un proxy già configurato , puoi passare il proxy direttamente al geocodificatore :

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

Oppure puoi impostare il proxy come variabile dambiente senza un comando esterno:

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

Quindi puoi accedere allindirizzo restituito come:

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

Risultato:

 13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany  

Se desideri estrarre il nome del paese e il codice postale, dai unocchiata al location.raw dizionario. I componenti della risposta sono specificati nella documentazione dellAPI di 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  

Tieni presente che questo è applicabile solo al geocodificatore Google V3 ed è soggetto a rotture se Google modifica la propria API …

Nota. Google non sembra restituire il nome del continente.

Commenti

  • Grazie per laiuto. Sto cercando di farlo funzionare da settimane
  • Luke, dovè la documentazione per accedere ai componenti grezzi?
  • @dustin geopy.readthedocs.org discute di raw dizionario
  • Stavo cercando lì ma non era ' abbastanza prolisso per me da capire. Non potevo ' t trovare molto sui codici postali o su come accedervi, se possibile.
  • Questo ' è perché raw è solo la risposta originale di t Il server ha analizzato un dizionario Python. La risposta di ciascuna API di geocodifica sarà diversa. Puoi utilizzare tecniche Python standard per ispezionarlo, ad esempio print, location.raw.keys(), dir(location.raw) ecc. …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *