Ich versuche, den folgenden Code auf meinem System zu testen, kann jedoch nicht die richtige Ausgabe erhalten.
- Ist dieser Code für die Verwendung von
geopy
mitGoogleV3
korrekt? - If Wie kann ich also den Namen des Landes und des Kontinents zurückgeben?
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
Kommentare
- Welche Ausgabe erhalten Sie? Erhalten Sie eine Fehlermeldung?
- @MaryBeth Ich möchte den Namen des Landes und des Kontinents (falls möglich) für diesen Lat Long zurückgeben.
- " Ich versuche, den folgenden Code auf meinem System zu testen, kann jedoch nicht die richtige Ausgabe erhalten. " Welche Ausgabe erhalten Sie im Vergleich zu der, die Sie erwarten? Wenn Sie eine Fehlermeldung erhalten, senden Sie diese bitte. Aus unserer -Tour : Konzentrieren Sie sich auf Fragen zu einem tatsächlichen Problem, mit dem Sie konfrontiert sind. Geben Sie Details darüber an, was Sie versucht haben und was Sie genau versuchen.
- Was ist der Wert von
location
, dh der umgekehrte Geocode war erfolgreich?
Antwort
Verwenden Sie keinen externen Befehl, um Ihren Proxy festzulegen. Wenn Sie aktiviert sind Windows und Ihr Proxy sind bereits in Ihren Internetoptionen eingerichtet. Sie müssen ihn überhaupt nicht im Skript einrichten. Er wird automatisch erkannt.
Wenn Sie noch keinen Proxy eingerichtet haben können Sie den Proxy direkt an den Geocoder übergeben:
geolocator = GoogleV3(api_key, proxies={"http": proxy_addr, "https": proxy_addr})
Oder Sie können den Proxy als Umgebungsvariable ohne externen Befehl festlegen:
os.environ["HTTP_PROXY"] = proxy_addr os.environ["HTTPS_PROXY"] = proxy_addr geolocator = GoogleV3(api_key)
Dann können Sie auf die zurückgegebene Adresse zugreifen wie:
location = geolocator.reverse([52.509669, 13.376294], timeout = 10, exactly_one=True) print location.longitude,location.latitude,location.address
Ausgabe:
13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany
Wenn Sie den Ländernamen und die Postleitzahl extrahieren möchten, schauen Sie in die location.raw
Wörterbuch. Die Antwortkomponenten sind in der Google API-Dokumentation angegeben.
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
Beachten Sie, dass dies nur für den GoogleV3-Geocoder gilt und beschädigt werden kann, wenn Google seine API ändert …
Hinweis – Google scheint nicht zurückzukehren der Name des Kontinents.
Kommentare
- Vielen Dank für die Hilfe. Wo befindet sich die Dokumentation für den Zugriff auf die Rohkomponenten?
- @dustin geopy.readthedocs.org erläutert die
raw
Wörterbuch - Ich habe dort gesucht, aber es war nicht ' nicht ausführlich genug, um es zu verstehen. Ich konnte ' Auf Postleitzahlen (Postleitzahlen) oder wie man darauf zugreift, wenn möglich, findet man nicht viel.
- Das ' liegt daran, dass
raw
ist nur die ursprüngliche Antwort von t Der Server wurde in ein Python-Wörterbuch analysiert. Die Antwort von jeder Geokodierungs-API ist unterschiedlich. Sie können Standard-Python-Techniken verwenden, um es zu überprüfen, dhprint
,location.raw.keys()
,dir(location.raw)
usw. …