Jeg prøver å teste følgende kode på systemet mitt, men jeg kan ikke få riktig utdata.

  1. Er denne koden riktig for bruk av geopy med GoogleV3?
  2. 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

  • Hvilken produksjon får du? Får du en feilmelding?
  • @ MaryBeth Jeg vil returnere landet og kontinentet (hvis mulig) for den lengden.
  • " Jeg prøver å teste følgende kode på systemet mitt, men jeg kan ikke få riktig utdata. " Hvilken utgang mottar du i forhold til hva du forventer? Hvis du får en feil, kan du legge den ut. Fra -turen : Fokuser på spørsmål om et faktisk problem du har møtt. Ta med detaljer om hva du har prøvd og nøyaktig hva du prøver å gjøre.
  • Hva er verdien av location, dvs. har den omvendte geokoden lykkes?

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. …

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *