Jag försöker testa följande kod på mitt system men jag kan inte få rätt utdata.

  1. Är den här koden korrekt för att använda geopy med GoogleV3?
  2. Om så, hur kan jag returnera land och kontinentnamn?

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

  • Vilken effekt får du? Får du ett felmeddelande?
  • @MaryBeth Jag vill returnera landets och kontinentens (om möjligt) namn för den längden.
  • " Jag försöker testa följande kod på mitt system men jag kan inte få rätt utdata. " Vilken utmatning får du jämfört med vad du förväntar dig? Om du får ett fel, vänligen lägg upp det. Från vår turné : Fokusera på frågor om ett faktiskt problem du har mött. Inkludera detaljer om vad du har försökt och exakt vad du försöker göra.
  • Vad är värdet för location, dvs har den omvända geokoden lyckats?

Svara

Använd inte ett externt kommando för att ställa in din proxy. Om du är på Windows och din proxy är redan inställd i dina internetalternativ, du behöver inte konfigurera det i skriptet alls, det kommer automatiskt att upptäckas.

Om du inte har en proxy redan konfigurerad , du kan skicka proxyn direkt till geokodaren :

 geolocator = GoogleV3(api_key, proxies={"http": proxy_addr, "https": proxy_addr})  

Eller så kan du ställa in proxyen som en miljövariabel utan ett externt kommando:

 os.environ["HTTP_PROXY"] = proxy_addr os.environ["HTTPS_PROXY"] = proxy_addr geolocator = GoogleV3(api_key)  

Sedan kan du komma åt den returnerade adressen 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  

Om du vill extrahera landets namn och postnummer, ta en titt i location.raw ordbok. Svarkomponenterna anges 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  

Observera att detta endast gäller för GoogleV3-geokodaren och kan komma att gå sönder om Google ändrar sitt API …

Obs! Google verkar inte returnera kontinentets namn.

Kommentarer

  • Tack för hjälpen. Försökte få detta att fungera veckor nu
  • Luke, var är dokumentationen för åtkomst till råkomponenterna?
  • @dustin geopy.readthedocs.org diskuterar raw ordbok
  • Jag tittade där men det var inte ' t tillräckligt för att jag skulle förstå. Jag kunde inte ' t hittar mycket på postnummer (postnummer) eller hur man kommer åt dem om möjligt.
  • Att ' beror på att raw är bara det ursprungliga svaret från t servern analyseras i en pythonordbok. Svaret från varje geokodning-API kommer att vara annorlunda. Du kan använda standardpytontekniker för att inspektera den, dvs print, location.raw.keys(), dir(location.raw) etc …

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *