Geocoding APIで住所から緯度・経度への変換をしてみる

Geocoding APIで住所から緯度・経度への変換をしてみる

Google Cloudで提供されているGeocoding APIで日本語の住所から緯度・経度を取得する方法を試してみました。
Clock Icon2025.03.03

データ事業本部の鈴木です。

住所を緯度・経度に変換したい場合、Google Maps PlatformのGeocoding APIを利用することができます。

私の場合だと、機械学習モデルの入力となる気象データがメッシュで提供されているような場合に、住所に対して紐づけたいケースがあります。ほかにも多くのユースケースがあると思います。

Google Cloudでの準備

Geocoding APIの利用には、Google CloudのアカウントとGeocoding APIが有効なプロジェクトが必要です。Google Cloudは既にあるとして、Geocoding APIの有効化とリクエスト時に必要なAPIキーの取得を行います。

まずはGoogle Cloudにアクセスし、APIライブラリを開きます。

APIライブラリ

検索するなどして、 Geocoding APIを開きます。

検索結果

「有効にする」を押すと、APIが有効化され、使用するAPIキーがポップアップで表示されるため控えておきます。

有効にする

あとで、認証情報を確認すると、確かにAPIキーが作成されていました。

認証情報

APIの利用

緯度・経度の取得例

APIを使って、住所から緯度・経度が取得できることを確認しました。

今回は東京タワーの住所(東京都港区芝公園4-2-8)から緯度・経度を取得してみました。

ガイドに記載があるとおり、APIは以下の例のように住所と作成したAPIキーを指定して利用できます。

https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY

https://developers.google.com/maps/documentation/geocoding/requests-geocoding?_gl=1

日本語で指定する場合は、住所はURLエンコーディングしておく必要があります。

URLエンコーディングはさまざまな方法で行うことができますが、例えばPythonだとurllib.parseモジュールを使うことができます。

>>> import urllib.parse
>>> urllib.parse.quote('東京都港区芝公園4-2-8')
'%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%B8%AF%E5%8C%BA%E8%8A%9D%E5%85%AC%E5%9C%924-2-8'

https://note.nkmk.me/python-urllib-parse-quote-unquote/

curlで実行した結果は以下のようになりました。

>>> curl 'https://maps.googleapis.com/maps/api/geocode/json?address=%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%B8%AF%E5%8C%BA%E8%8A%9D%E5%85%AC%E5%9C%924-2-8&key=作成したAPIキー'

{
   "results" : 
   [
      {
         "address_components" : 
         [
            {
               "long_name" : "Tokyo Tower",
               "short_name" : "Tokyo Tower",
               "types" : 
               [
                  "premise"
               ]
            },
            {
               "long_name" : "8",
               "short_name" : "8",
               "types" : 
               [
                  "premise"
               ]
            },
            {
               "long_name" : "2",
               "short_name" : "2",
               "types" : 
               [
                  "political",
                  "sublocality",
                  "sublocality_level_4"
               ]
            },
            {
               "long_name" : "4-chōme",
               "short_name" : "4-chōme",
               "types" : 
               [
                  "political",
                  "sublocality",
                  "sublocality_level_3"
               ]
            },
            {
               "long_name" : "Shibakōen",
               "short_name" : "Shibakōen",
               "types" : 
               [
                  "political",
                  "sublocality",
                  "sublocality_level_2"
               ]
            },
            {
               "long_name" : "Minato City",
               "short_name" : "Minato City",
               "types" : 
               [
                  "locality",
                  "political"
               ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : 
               [
                  "administrative_area_level_1",
                  "political"
               ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : 
               [
                  "country",
                  "political"
               ]
            },
            {
               "long_name" : "105-0011",
               "short_name" : "105-0011",
               "types" : 
               [
                  "postal_code"
               ]
            }
         ],
         "formatted_address" : "Tokyo Tower, 4-chōme-2-8 Shibakōen, Minato City, Tokyo 105-0011, Japan",
         "geometry" : 
         {
            "bounds" : 
            {
               "northeast" : 
               {
                  "lat" : 35.6591963,
                  "lng" : 139.7462094
               },
               "southwest" : 
               {
                  "lat" : 35.65794,
                  "lng" : 139.7446811
               }
            },
            "location" : 
            {
               "lat" : 35.6585696,
               "lng" : 139.745484
            },
            "location_type" : "ROOFTOP",
            "viewport" : 
            {
               "northeast" : 
               {
                  "lat" : 35.6599171302915,
                  "lng" : 139.7467942302915
               },
               "southwest" : 
               {
                  "lat" : 35.6572191697085,
                  "lng" : 139.7440962697085
               }
            }
         },
         "navigation_points" : 
         [
            {
               "location" : 
               {
                  "latitude" : 35.6588811,
                  "longitude" : 139.7457884
               },
               "restricted_travel_modes" : 
               [
                  "WALK"
               ]
            },
            {
               "location" : 
               {
                  "latitude" : 35.6587618,
                  "longitude" : 139.745636
               },
               "restricted_travel_modes" : 
               [
                  "DRIVE"
               ]
            }
         ],
         "place_id" : "ChIJcx2EkL2LGGARv0gV3HSFqQo",
         "types" : 
         [
            "premise"
         ]
      }
   ],
   "status" : "OK"
}

表記揺れの検証

住所の場合表記が揺れる場合があります。今回は以下の住所でも試してみて、全て同じ座標が取れることを確認しました。

東京都港区芝公園四丁目2番8号
東京都港区芝公園四ー二ー八
東京都港区芝公園4丁目2番8号
東京都港区芝公園4-2-8号
東京都港区芝公園4-2-8
東京都港区芝公園四丁目二番八号

最後に

Geocoding APIで住所から緯度・経度の座標情報に変換する例のご紹介でした。参考になりましたら幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.