Jeg prøver å teste følgende kode på systemet mitt, men jeg kan ikke få riktig utdata.
- Er denne koden riktig for bruk av
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
Ikke bruk en ekstern kommando for å angi proxyen din. Hvis du er på Windows og proxyen din er allerede konfigurert i internettalternativene dine, du trenger ikke å sette den opp i skriptet i det hele tatt, den blir automatisk oppdaget.
Hvis du ikke har en proxy allerede konfigurert , kan du sende proxyen direkte til geokoderen :
geolocator = GoogleV3(api_key, proxies={"http": proxy_addr, "https": proxy_addr})
Eller du kan angi proxyen som en miljøvariabel uten en ekstern kommando:
os.environ["HTTP_PROXY"] = proxy_addr os.environ["HTTPS_PROXY"] = proxy_addr geolocator = GoogleV3(api_key)
Så kan du få tilgang til den returnerte adressen som:
location = geolocator.reverse([52.509669, 13.376294], timeout = 10, exactly_one=True) print location.longitude,location.latitude,location.address
Utgang:
13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany
Hvis du vil trekke ut landnavnet og postnummeret, kan du ta en titt i location.raw
ordbok. Svarskomponentene er spesifisert i Google API-dokumentasjon .
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
Merk at dette bare gjelder for GoogleV3-geokoderen og kan bli ødelagt hvis Google endrer API-en …
Merk – Google ser ikke ut til å returnere kontinentnavnet.
Kommentarer
- Takk for hjelpen. Har prøvd å få dette til å fungere uker nå
- Luke, hvor er dokumentasjonen for tilgang til råkomponentene?
- @dustin geopy.readthedocs.org diskuterer
raw
ordbok - Jeg så der, men det var ikke ' t ordentlig nok til at jeg kunne forstå. Jeg kunne ikke ' t finner mye på postnummer (postnummer) eller hvordan du får tilgang til dem hvis mulig.
- At ' er fordi
raw
er bare det originale svaret fra t serveren ble analysert i en pythonordbok. Svaret fra hver geokoding API vil være annerledes. Du kan bruke standard pythonteknikker for å inspisere den, dvs.print
,location.raw.keys()
,dir(location.raw)
osv. …
location
, dvs. har den omvendte geokoden lykkes?