Geocoding APIで住所から緯度・経度への変換をしてみる
データ事業本部の鈴木です。
住所を緯度・経度に変換したい場合、Google Maps PlatformのGeocoding APIを利用することができます。
私の場合だと、機械学習モデルの入力となる気象データがメッシュで提供されているような場合に、住所に対して紐づけたいケースがあります。ほかにも多くのユースケースがあると思います。
Google Cloudでの準備
Geocoding APIの利用には、Google CloudのアカウントとGeocoding APIが有効なプロジェクトが必要です。Google Cloudは既にあるとして、Geocoding APIの有効化とリクエスト時に必要なAPIキーの取得を行います。
まずはGoogle Cloudにアクセスし、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
日本語で指定する場合は、住所は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'
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で住所から緯度・経度の座標情報に変換する例のご紹介でした。参考になりましたら幸いです。