システムで次のコードをテストしようとしていますが、正しい出力を取得できません。
- このコードは
geopy
をGoogleV3
で使用するのに正しいですか? - では、どうすれば国と大陸の名前を返すことができますか?
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
コメント
回答
外部コマンドを使用してプロキシを設定しないでください。 Windowsとプロキシはインターネットオプションですでに設定されています。スクリプトで設定する必要はありません。自動検出されます。
プロキシがまだ設定されていない場合、プロキシをジオコーダーに直接渡すことができます:
geolocator = GoogleV3(api_key, proxies={"http": proxy_addr, "https": proxy_addr})
または、外部コマンドなしでプロキシを環境変数として設定できます:
os.environ["HTTP_PROXY"] = proxy_addr os.environ["HTTPS_PROXY"] = proxy_addr geolocator = GoogleV3(api_key)
次に、次のように返されたアドレスにアクセスできます。
location = geolocator.reverse([52.509669, 13.376294], timeout = 10, exactly_one=True) print location.longitude,location.latitude,location.address
出力:
13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany
国名と郵便番号を抽出する場合は、location.raw
辞書。応答コンポーネントは、 GoogleAPIドキュメントで指定されています。
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
これはGoogleV3ジオコーダーにのみ適用され、GoogleがAPIを変更した場合に破損する可能性があることに注意してください…
注-Googleは戻ってこないようです大陸名。
コメント
- 助けてくれてありがとう。これを数週間機能させようとしています
- ルーク、生のコンポーネントにアクセスするためのドキュメントはどこにありますか?
- @dustin geopy.readthedocs.org では、
raw
辞書 - そこを探していましたが、'理解するのに十分なほど冗長ではありませんでした。'郵便番号(郵便番号)や、可能であればそれらにアクセスする方法については、多くのことを見つけられません。
- 'は、
raw
はtからの元の応答ですサーバーはPython辞書に解析されました。各ジオコーディングAPIからの応答は異なります。標準のPythonテクニックを使用して、print
、location.raw.keys()
、dir(location.raw)
などを検査できます。 …
location
の値は何ですか。つまり、逆ジオコードがあります。成功しましたか?