Jeg prøver at teste følgende kode på mit system, men jeg kan ikke få den korrekte output.

  1. Er denne kode korrekt til brug af 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

  • Hvilket output får du? Modtager du en fejlmeddelelse?
  • @MaryBeth Jeg vil gerne returnere navnet på landet og kontinentet (hvis det er muligt) for den længde.
  • " Jeg prøver at teste følgende kode på mit system, men jeg kan ikke få den korrekte output. " Hvilken output modtager du versus hvad forventer du? Hvis du modtager en fejl, bedes du sende den. Fra vores tour : Fokuser på spørgsmål om et faktisk problem, du har været udsat for. Medtag detaljer om, hvad du har prøvet, og nøjagtigt hvad du prøver at gøre.
  • Hvad er værdien af location, dvs. har den omvendte geokode været vellykket?

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *