Az alábbi kódot próbálom tesztelni a rendszeremen, de nem tudom megszerezni a megfelelő kimenetet.
- Helyes ez a kód a
geopy
használatáhozGoogleV3
-vel? - Ha Szóval, hogyan adhatom vissza az ország és a kontinens nevét?
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
Megjegyzések
Válasz
Ne használjon külső parancsot a proxy beállításához. Ha be van kapcsolva A Windows és a proxy már be van állítva az internetbeállításaiban, egyáltalán nem kell beállítania a szkriptben, automatikusan felismeri.
Ha még nincs beállítva proxy , a proxyt közvetlenül átadhatja a geokódolónak :
geolocator = GoogleV3(api_key, proxies={"http": proxy_addr, "https": proxy_addr})
Vagy beállíthatja a proxyt környezeti változóvá külső parancs nélkül:
os.environ["HTTP_PROXY"] = proxy_addr os.environ["HTTPS_PROXY"] = proxy_addr geolocator = GoogleV3(api_key)
Ezután elérheti a visszaküldött címet, például:
location = geolocator.reverse([52.509669, 13.376294], timeout = 10, exactly_one=True) print location.longitude,location.latitude,location.address
Kimenet:
13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany
Ha kibontja az ország nevét és irányítószámát, nézze meg a location.raw
szótár. A válaszkomponenseket a Google API dokumentáció határozza meg.
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
Vegye figyelembe, hogy ez csak a GoogleV3 geokódolóra vonatkozik, és sérülhet, ha a Google megváltoztatja az API-jukat …
Megjegyzés – Úgy tűnik, hogy a Google nem tér vissza a kontinens neve.
Hozzászólások
- Köszönöm a segítséget. Ezt már hetekkel próbáltam elérni
- Luke hol van a dokumentáció a nyers összetevők eléréséhez?
- @dustin geopy.readthedocs.org tárgyalja a
raw
szótár - néztem oda, de nem volt ' elég bő, hogy megértsem. Nem tudtam ' nem talál sokat az irányítószámokon (irányítószámokon) vagy azok elérésének módján, ha lehetséges.
- Ez ' s, mert
raw
csak a t eredeti válasza szerver egy piton szótárba elemzett. Az egyes geokódoló API-k válasza eltérő lesz. Az ellenőrzéshez szabványos python technikákat használhat, példáulprint
,location.raw.keys()
,dir(location.raw)
stb …
location
értéke, azaz fordított geokódja van sikeres volt?