PythonでMapboxを使ったジオコーディング
はじめに
インターネットからデータをクロールして地図上に表示するアプリを開発していました。住所を緯度経度に変換するためにジオコーディングを利用しています。
ジオコーディングとは
Google Maps APIを利用したジオコーディング(参考)
これまでじゃジオコーディングにGoogle Maps APIを利用していました。googlemaps
というライブラリを利用して、以下のようなコードで簡単にジオコーディングの結果を取得できていました。
import googlemaps
MAPS_API_KEY = 'GOOGLE_MAPS_API_KEY'
def geocode(address):
try:
gmaps = googlemaps.Client(key=MAPS_API_KEY)
result = gmaps.geocode(address)
lat = result[0]['geometry']['location']['lat']
lng = result[0]['geometry']['location']['lng']
return lat, lng
except:
return None, None
Google Maps APIのジオコーディングの料金
Google Maps APIのジオコーディングの精度には不満が無いのですが、1リクエストあたりで料金が発生して無料枠が無いため、少しの利用であっても少額の課金が発生していました。
0~100,000 | 100,001~500,000 | |
---|---|---|
リクエストあたりの料金 | $0.005 (1,000回あたり$5.00) | $0.004 (1,000回あたり$4.00) |
Mapbox
ここ数年は地図サービスはOpenStreetMapなどGoogle Maps以外の選択肢がありますし、ジオコーディングでもGoogle Maps以外の選択肢を検討してみる時期かなと思いました。
以前にOpenStreetMapのジオコーディングを試してみたときは精度がよくなかったので、今回はMapboxのジオコーディングを利用してみることにしました。
Mapboxのジオコーディングの料金
Mapboxのジオコーディングの料金は以下のようになっています。10万リクエストまでの無料枠があるのがうれしいです。
Monthly requests | Cost per 1,000 |
---|---|
Up to 100,000 | Free |
100,001 to 500,000 | $0.75 |
500,001 to 1,000,000 | $0.60 |
1,000,001 to 5,000,000 | $0.45 |
5,000,000+ | Contact sales |
Mapboxを利用したジオコーディング
Mapboxを利用したジオコーディングのコードは以下のようになりました。
import geocoder
MAPS_API_KEY = 'MAPS_API_KEY'
def geocode(address):
try:
result = geocoder.mapbox(address, key=MAPS_API_KEY)
return result.lat, result.lng
except:
return None, None
ただ、結果を見ると有名な建物についてはジオコーディングが成功しているのですが、私のアプリが対象としている建物についてはほとんど失敗していました。
まとめ
Mapboxを利用したジオコーディングを試してみました。Mapboxのジオコーディングは私のアプリにとっては精度が低いため、私は引き続きGoogle Maps APIを利用しようと思います。
ジオコーディングの料金を比較するとGoogle Maps APIはMapboxに比べてかなり強気な料金設定をしていますが、精度の差を考えると当然の料金設定のように思いました。OpenStreetMapやMapboxのジオコーディングについては今後の進歩に期待したいと思います。
Discussion