Yritän testata seuraavaa koodia järjestelmässäni, mutta en pysty saamaan oikeaa tulosta.
- Onko tämä koodi oikea käytettäväksi
geopy
kanssaGoogleV3
? - Jos niin, kuinka voin palauttaa maan ja maanosan nimen?
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
Kommentit
Vastaa
Älä käytä välityspalvelinta ulkoisella komennolla. Jos olet päällä Windows ja välityspalvelimesi on jo määritetty Internet-asetuksissasi, sinun ei tarvitse asettaa sitä komentosarjassa, se havaitaan automaattisesti.
Jos sinulla ei ole välityspalvelinta jo määritetty , voit välittää välityspalvelimen suoraan geokooderille :
geolocator = GoogleV3(api_key, proxies={"http": proxy_addr, "https": proxy_addr})
Tai voit asettaa välityspalvelimen ympäristömuuttujaksi ilman ulkoista komentoa:
os.environ["HTTP_PROXY"] = proxy_addr os.environ["HTTPS_PROXY"] = proxy_addr geolocator = GoogleV3(api_key)
Sitten voit käyttää palautettua osoitetta seuraavasti:
location = geolocator.reverse([52.509669, 13.376294], timeout = 10, exactly_one=True) print location.longitude,location.latitude,location.address
Tulos:
13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany
Jos haluat purkaa maan nimen ja postinumeron, katso location.raw
sanakirja. Vastauskomponentit määritetään Google-sovellusliittymän ohjeissa .
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
Huomaa, että tämä koskee vain GoogleV3-geokooderia ja saattaa rikkoutua, jos Google muuttaa sovellusliittymää …
Huomaa – Google ei näytä palaavan mantereen nimi.
Kommentit
- Kiitos avusta. Yritit saada tämän toimimaan viikkoina
- Luke, missä on dokumentaatio raakakomponenttien käytöstä?
- @dustin geopy.readthedocs.org käsitellään
raw
sanakirja - Etsin sitä, mutta se ei ollut ' riittävän syvä, jotta voisin ymmärtää. En voinut ' t löytää paljon postinumeroista (postinumerot) tai siitä, miten niihin pääsee, jos mahdollista.
- Että ' s, koska
raw
on vain t: n alkuperäinen vastaus palvelin jäseni python-sanakirjaksi. Kunkin geokoodausliittymän vastaus on erilainen. Voit tarkastaa sen tavallisilla python-tekniikoilla, ts.print
,location.raw.keys()
,dir(location.raw)
jne. …
location
-arvon arvo, eli sillä on käänteinen geokoodi onnistunut?