Pokouším se otestovat následující kód v mém systému, ale nemohu získat správný výstup.

  1. Je tento kód správný pro použití geopy s GoogleV3?
  2. Pokud jak tedy mohu vrátit název země a kontinentu?

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 

Komentáře

  • Jaký výstup dostáváte? Zobrazuje se vám chybová zpráva?
  • @MaryBeth Chci vrátit název země a kontinentu (pokud je to možné) pro tento lat long.
  • " Pokouším se otestovat následující kód v mém systému, ale nemohu získat správný výstup. " Jaký výstup dostáváte oproti čemu očekáváte? Pokud se vám zobrazuje chyba, odešlete ji. Z naší prohlídky : Zaměřte se na otázky týkající se skutečného problému, kterému jste čelili. Uveďte podrobnosti o tom, co jste zkoušeli a co přesně se snažíte dělat.
  • Jaká je hodnota location, tj. Má obrácený geokód byl úspěšný?

Odpověď

Nepoužívejte externí příkaz k nastavení serveru proxy. Pokud jste na Windows a váš proxy je již nastaven ve vašich možnostech internetu, nemusíte jej vůbec nastavovat ve skriptu, bude automaticky detekován.

Pokud ještě nemáte nastavený proxy , můžete předat proxy přímo geokodéru :

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

Nebo můžete nastavit proxy server jako proměnnou prostředí bez externího příkazu:

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

Pak můžete získat přístup k vrácené adrese jako:

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

Výstup:

 13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany  

Chcete-li extrahovat název země a PSČ, podívejte se do location.raw slovník. Komponenty odpovědi jsou uvedeny v dokumentaci Google API .

 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  

Upozorňujeme, že toto platí pouze pro geokodér GoogleV3 a může dojít k jeho rozbití, pokud Google změní své API …

Poznámka – Google se zřejmě nevrací název kontinentu.

Komentáře

  • Děkujeme za pomoc. Snažím se, aby to teď fungovalo týdny
  • Luke, kde je dokumentace pro přístup k surovým komponentám?
  • @dustin geopy.readthedocs.org pojednává o raw slovník
  • Díval jsem se tam, ale nebylo to ' dostatečně podrobné, abych to pochopil. Nemohl jsem ' nenajdete mnoho poštovních směrovacích čísel ani toho, jak k nim získat přístup, pokud je to možné.
  • To ' proto, že raw je pouze původní odpověď od t server analyzoval do pythonového slovníku. Odpověď z každého API pro geokódování se bude lišit. Ke kontrole můžete použít standardní techniky pythonu, tj. print, location.raw.keys(), dir(location.raw) atd. …

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *