こんにちはマダラです!
今回は久しぶりにエンジニアっぽい記事です。
Pythonを使ってGoogleのジオコーディングライブラリを利用して住所から緯度経度を取得していきます。
本当はYahooのAPIを用いたジオコーディングといくつかのPythonライブラリを利用したジオコーディングの比較記事を書こうと思ったのですがコード捨ててました、、笑
というわけで、コードも載せようと思うのですがグーグルのみです、、
GoogeのジオコーディングAPIについて
結局のところグーグルのAPIが一番精度が良かったという結果でした。
しかし、グーグルのAPIにも問題があって、グーグルクラウドプラットフォームの無料枠だけでことを済まそうと思うとかなり時間がかかってしまうという点です。
1日2500リクエスト以上、一月200ドル以上の利用だと支払いが発生します。
2500リクエストでだいたい1000円ちょっとくらいの料金でした。これが一月200ドル分まで行うことができます。
つまり基本的に1日2500リクエストずつ実行していくことになるのですが、データ数が多い場合には無料で全てやろうとすると何日もかかってしまうわけですね、、
その点、YahooのジオコーディングAPIだとGoogel APIよりかは大量リクエストが可能なので、早くジオコーディングを終わらせることができます。
しかし、実際の住所よりも0~300メートル程度誤差があるようで精度が少し劣るといった具合でした。
みなさんのジオコーディングの状況に合わせて、うまく使いこなすといいかと思います!!
Pythonでジオコーディングのコード
それでは肝心のコードをみていきましょう!Pythonでの実装コードはネット上にもいくらでも転がっているので、Yahooとかとの比較にしたかったのですが残念です、、、
import requests
import time
def reqestGeocodingAPI(address):
Url = "https://maps.googleapis.com/maps/api/geocode/json"
params={}
params["key"] = "APIキー"
params["language"] = "ja"
params["address"]=address
res = requests.get(Url, params).json()
if res["status"]=="OK":
return res
else:
return False
result=[]
for q in queries:
res = reqestGeocodingAPI(q)
if res is not False:
result.append(str(res))
else:
#結果がないときの処理
time.sleep(0.02)
#txt形式で保存
f = open('geocoding_result.txt', 'w')
for row in result:
f.write(row + "\n")
f.close()
queriesに住所のリストでもなんでも代入して、ジオコーディングします。
このコードでは結果をtxt形式でとりあえず保存しています。
APIキーにみなさまのGCPアカウントのAPIキーをいれてください。
あと言い忘れていましたが実行中スリープを入れているのは、1秒間のリクエストが多すぎても料金が発生するためです。
スリープで実行速度をわざと遅くしています。
記事にするにあたりちょこちょこ、即席で修正したので細かいミス等あるかもしれませんが微調整して利用してください。
まとめ
PythonでGoogleのジオコーディングAPIを利用するコードでした。
ではでは。