Az alábbi kódot próbálom tesztelni a rendszeremen, de nem tudom megszerezni a megfelelő kimenetet.

  1. Helyes ez a kód a geopy használatához GoogleV3 -vel?
  2. 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

  • Milyen kimenetet kap? Hibaüzenetet kap?
  • @MaryBeth vissza akarom adni az ország és a kontinens (ha lehetséges) nevét arra a hosszú latra.
  • " A következő kódot próbálom tesztelni a rendszeremen, de nem tudom elérni a megfelelő kimenetet. " Milyen kimenetet kapsz, mire számítva? Ha hibát kap, tegye közzé. bemutatónkból : Összpontosítson egy aktuális problémával kapcsolatos kérdésekre. Adjon meg részleteket arról, hogy mit próbált, és pontosan mit próbál tenni.
  • Mi a location értéke, azaz fordított geokódja van sikeres volt?

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ául print, location.raw.keys(), dir(location.raw) stb …

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük