国土地理院APIを使ったジオコーディング・逆ジオコーディングの方法

国土地理院APIは、日本国内での住所や位置情報を利用するための便利なツールです。本記事では、ジオコーディング(住所から緯度・経度を取得)逆ジオコーディング(緯度・経度から住所を取得) の使い方を解説し、curlPHPPython のコード例も紹介します。

ジオコーディング(住所から緯度・経度を取得)

概要

ジオコーディングでは、指定した住所に対応する緯度・経度を取得できます。

利用例: 東京都東村山市の緯度・経度を取得

1. curlによるリクエスト

curl "https://msearch.gsi.go.jp/address-search/AddressSearch?q=東京都東村山市"

レスポンス例:

[
  {
    "geometry": {
      "coordinates": [
        139.468582,
        35.75465
      ],
      "type": "Point"
    },
    "type": "Feature",
    "properties": {
      "addressCode": "",
      "title": "東京都東村山市"
    }
  }
]

ポイント:

  • 緯度: 35.75465
  • 経度: 139.468582

2. PHPによるリクエスト

<?php
$address = "東京都東村山市";
$url = "https://msearch.gsi.go.jp/address-search/AddressSearch?q=" . urlencode($address);

$response = file_get_contents($url);
$data = json_decode($response, true);

if (!empty($data)) {
    $coordinates = $data[0]['geometry']['coordinates'];
    echo "経度: " . $coordinates[0] . "\n";
    echo "緯度: " . $coordinates[1] . "\n";
} else {
    echo "データが見つかりませんでした。\n";
}
?>

3. Pythonによるリクエスト

import requests

address = "東京都東村山市"
url = f"https://msearch.gsi.go.jp/address-search/AddressSearch?q={address}"

response = requests.get(url)
data = response.json()

if data:
    coordinates = data[0]["geometry"]["coordinates"]
    print(f"経度: {coordinates[0]}")
    print(f"緯度: {coordinates[1]}")
else:
    print("データが見つかりませんでした。")

逆ジオコーディング(緯度・経度から住所を取得)

概要

逆ジオコーディングでは、指定した緯度・経度から最寄りの町丁目レベルの住所を取得できます。

利用例: 東村山市付近の緯度・経度から住所を取得

1. curlによるリクエスト

curl "https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress?lat=35.75465&lon=139.468582"

レスポンス例:

{
  "results": {
    "muniCd": "13213",
    "lv01Nm": "本町一丁目"
  }
}

ポイント:

  • 町丁目: 本町一丁目

2. PHPによるリクエスト

<?php
$lat = 35.75465;
$lon = 139.468582;
$url = "https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress?lat=$lat&lon=$lon";

$response = file_get_contents($url);
$data = json_decode($response, true);

if (!empty($data['results'])) {
    $address = $data['results']['lv01Nm'];
    echo "住所: " . $address . "\n";
} else {
    echo "住所情報が見つかりませんでした。\n";
}
?>

3. Pythonによるリクエスト

import requests

lat, lon = 35.75465, 139.468582
url = f"https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress?lat={lat}&lon={lon}"

response = requests.get(url)
data = response.json()

if "results" in data:
    address = data["results"]["lv01Nm"]
    print(f"住所: {address}")
else:
    print("住所情報が見つかりませんでした。")

活用例

ジオコーディングの活用

  • 配送サービス: 入力住所を緯度・経度に変換し、最適ルートを計算。
  • 防災アプリ: 住所から位置情報を取得し、防災情報を表示。

逆ジオコーディングの活用

  • 現在地アプリ: GPSから取得した緯度・経度を住所に変換し表示。
  • ナビゲーションシステム: 緯度・経度を元に近隣住所を案内。

注意点

  1. 住所精度: 番地レベルの情報が必要な場合は、Google Maps APIなど他のサービスを検討してください。
  2. リクエスト制限: 適切な間隔を設けてリクエストを送信し、過剰な負荷を避けましょう。

おわりに

国土地理院APIは、日本国内での住所情報をシンプルかつ無料で取得できる強力なツールです。ジオコーディングと逆ジオコーディングを活用して、あなたのアプリケーションやシステムをより便利に進化させましょう。

コメント

タイトルとURLをコピーしました