逆ジオコーディングとは
逆ジオコーディング(Reverse Geocoding)とは、GPS座標(緯度・経度)から住所や地名を取得する処理です。スマートフォンのGPSで取得した現在位置を「〇〇市〇〇町」と表示する機能や、ユーザーが地図上でタップした場所の住所を表示する機能などに使われます。
主要な逆ジオコーディングAPI
Google Maps Geocoding API
業界で最も高精度とされる逆ジオコーディングAPIです。日本の住所に対応しており、番地レベルまで精度の高い結果が得られます。
- 料金:5ドル/1,000リクエスト(毎月200ドルの無料クレジット)
- 精度:日本の住所で最高レベル
- レスポンス:住所コンポーネント(都道府県・市区町村・番地等)に分解された結果
Mapbox Geocoding API
- 料金:月100,000リクエストまで無料
- 精度:日本の地方部では Google より精度が劣る場合あり
- 特徴:Mapboxの地図と統合して使いやすい
国土地理院 逆ジオコーディングAPI
- 料金:無料
- 精度:日本国内限定、国内では高精度
- 特徴:出典明示で商用利用可
OpenStreetMap / Nominatim
- 料金:無料(利用ポリシーあり)
- 精度:地域によってデータ品質にばらつきあり
- 注意:公開Nominatimサーバーへの高頻度アクセスは禁止(自前でサーバーを立てることを推奨)
Google Maps Geocoding APIの実装例
async function reverseGeocode(lat, lng) {
const apiKey = process.env.GOOGLE_MAPS_API_KEY;
const url = `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&language=ja&key=${apiKey}`;
const res = await fetch(url);
const data = await res.json();
if (data.status === 'OK' && data.results.length > 0) {
return data.results[0].formatted_address;
}
return null;
}
// 使用例
const address = await reverseGeocode(35.6762, 139.6503);
console.log(address); // 東京都渋谷区道玄坂...
住所コンポーネントの取得
formatted_address(完全な住所文字列)だけでなく、address_componentsを使うことで都道府県・市区町村・町名・番地を個別に取得できます。これにより、フォームの都道府県・市区町村を個別フィールドに自動入力する機能が実装できます。
address_componentsの各要素にはtypesフィールドがあり、administrative_area_level_1(都道府県)・locality(市区町村)・sublocality(町名)などの値で種類を識別します。
活用例
配達先住所の自動入力
ユーザーが地図上でタップした場所の住所をフォームに自動入力します。スマートフォンの地図アプリのような「現在地を住所として利用」機能の実装に使われます。
写真の撮影地情報
画像のExifデータからGPS座標を取得し、逆ジオコーディングで撮影地を表示します。フォトアルバムアプリや旅行記サービスで活用されます。
タクシー・ライドシェアアプリ
ユーザーの現在位置(GPS座標)から住所を表示し、乗車地点の確認・変更を容易にします。
コスト最適化
- 同じ座標の繰り返しリクエストにはキャッシュ(Redis等)を活用
- 座標を適切な精度に丸めてキャッシュのヒット率を上げる
- バッチ処理ではなく必要なタイミングでのみ呼び出す
- 日本国内限定のサービスには国土地理院の無料APIも検討
まとめ
逆ジオコーディングAPIは位置情報サービス・配送システム・写真サービスなど多くのアプリに欠かせない機能です。日本国内の高精度が必要な場合はGoogle Maps Geocoding APIが最有力です。コストを抑えたい場合はMapboxの無料枠または国土地理院の無料APIを検討してください。大量処理にはキャッシュを活用して無駄なAPIリクエストを削減することがコスト管理の鍵です。