システムで次のコードをテストしようとしていますが、正しい出力を取得できません。

  1. このコードはgeopyGoogleV3で使用するのに正しいですか?
  2. では、どうすれば国と大陸の名前を返すことができますか?

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 

コメント

  • どのような出力が得られますか?エラーメッセージが表示されますか?
  • @MaryBethその緯度の長い国と大陸(可能な場合)の名前を返します。
  • "システムで次のコードをテストしようとしていますが、正しい出力を取得できません。"どの出力を受信し、何を期待していますか?エラーが発生した場合は、投稿してください。 ツアーから:直面した実際の問題についての質問に焦点を当てます。試したこととやろうとしていることの詳細を含めてください。
  • locationの値は何ですか。つまり、逆ジオコードがあります。成功しましたか?

回答

外部コマンドを使用してプロキシを設定しないでください。 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テクニックを使用して、printlocation.raw.keys()dir(location.raw)などを検査できます。 …

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です