Jeg prøver at teste følgende kode på mit system, men jeg kan ikke få den korrekte output.
- Er denne kode korrekt til brug af
geopy
medGoogleV3
? - Hvis så hvordan kan jeg returnere land- og kontinentnavn?
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
Kommentarer
Svar
Brug ikke en ekstern kommando til at indstille din proxy. Hvis du er på Windows og din proxy er allerede konfigureret i dine internetindstillinger, du behøver slet ikke at konfigurere det i scriptet, det registreres automatisk.
Hvis du ikke allerede har en proxy konfigureret , kan du sende proxyen direkte til geokoderen :
geolocator = GoogleV3(api_key, proxies={"http": proxy_addr, "https": proxy_addr})
Eller du kan indstille proxyen som en miljøvariabel uden en ekstern kommando:
os.environ["HTTP_PROXY"] = proxy_addr os.environ["HTTPS_PROXY"] = proxy_addr geolocator = GoogleV3(api_key)
Så kan du få adgang til den returnerede adresse som:
location = geolocator.reverse([52.509669, 13.376294], timeout = 10, exactly_one=True) print location.longitude,location.latitude,location.address
Output:
13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany
Hvis du vil udtrække landets navn og postnummer, skal du kigge i location.raw
ordbog. Svarskomponenterne er specificeret i Google API-dokumentation .
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
Bemærk, dette gælder kun for GoogleV3-geokoderen og er underlagt brud, hvis Google ændrer deres API …
Bemærk – Google ser ikke ud til at vende tilbage kontinentets navn.
Kommentarer
- Tak for hjælpen. Har forsøgt at få dette til at fungere uger nu
- Luke, hvor er dokumentationen for at få adgang til de rå komponenter?
- @dustin geopy.readthedocs.org diskuterer
raw
ordbog - Jeg kiggede der, men det var ikke ' t tilstrækkelig til, at jeg kunne forstå det. Jeg kunne ikke ' t finder meget på postnumre (postnumre) eller hvordan man får adgang til dem, hvis det er muligt.
- At ' er fordi
raw
er bare det originale svar fra t serveren blev parset i en pythonordbog. Svaret fra hver geokodning API vil være anderledes. Du kan bruge standard python-teknikker til at inspicere det, dvs.print
,location.raw.keys()
,dir(location.raw)
osv. …
location
, dvs. har den omvendte geokode været vellykket?