📍

PythonでMapboxを使ったジオコーディング

2021/09/08に公開

はじめに

インターネットからデータをクロールして地図上に表示するアプリを開発していました。住所を緯度経度に変換するためにジオコーディングを利用しています。

ジオコーディングとは

https://business.mapfan.com/blog/detail/628

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)

https://developers.google.com/maps/billing/gmp-billing?hl=JA&_ga=2.205137872.1969695636.1631084560-1057230835.1626612431#geocoding

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

https://www.mapbox.com/pricing/

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

https://geocoder.readthedocs.io/providers/Mapbox.html

ただ、結果を見ると有名な建物についてはジオコーディングが成功しているのですが、私のアプリが対象としている建物についてはほとんど失敗していました。

まとめ

Mapboxを利用したジオコーディングを試してみました。Mapboxのジオコーディングは私のアプリにとっては精度が低いため、私は引き続きGoogle Maps APIを利用しようと思います。

ジオコーディングの料金を比較するとGoogle Maps APIはMapboxに比べてかなり強気な料金設定をしていますが、精度の差を考えると当然の料金設定のように思いました。OpenStreetMapやMapboxのジオコーディングについては今後の進歩に期待したいと思います。

Discussion

ログインするとコメントできます