Pokouším se otestovat následující kód v mém systému, ale nemohu získat správný výstup.
- Je tento kód správný pro použití
geopy
sGoogleV3
? - 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
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. …
location
, tj. Má obrácený geokód byl úspěšný?