論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
ジオコード変換
Geocoding
データエンジニアリング
別称: マッピング処理

🔖 キーワード索引

住所緯度経度ジオコーディングリバースジオコーディングGeoPy国土地理院Google Maps APIGISコロプレス図空間結合

別名・略称:マッピング処理

💡 30秒で分かる結論

ジオコード変換(Geocoding):住所と緯度経度の相互変換

📍 あなたが今見ているもの

SSDSE 都道府県データには 都道府県名 はあっても緯度経度はありません。 地図上で可視化するには 「東京都 → (35.6895, 139.6917)」 のような変換が必要です。 ジオコーディングはこのような 地理情報の橋渡し を行う基本処理。 災害分析、 商圏分析、 配送最適化など、 場所情報を扱う分析の前段として不可欠です。

🎨 直感で掴む

ジオコーディングのフロー

  1. 入力:東京都千代田区永田町1-7-1
  2. API or ライブラリにクエリ
  3. 出力:緯度 35.6759, 経度 139.7448
  4. 地図にプロット可能

逆方向(リバースジオコーディング)

  • 入力:(35.6895, 139.6917)
  • 出力:東京都新宿区西新宿2丁目

📐 定義 / 数式

【2点間の距離(Haversine 公式)】
$$d = 2R \arcsin\sqrt{\sin^2\!\left(\tfrac{\Delta\phi}{2}\right) + \cos\phi_1\cos\phi_2\sin^2\!\left(\tfrac{\Delta\lambda}{2}\right)}$$
R は地球半径 (6,371 km)、 $\phi$ は緯度、 $\lambda$ は経度

🔬 記号・式を言葉で読み解く

住所
「東京都千代田区永田町1-7-1」のような文字列。 表記揺れ・誤字に注意。
緯度経度
地球座標系での位置。 WGS84 が国際標準。
ジオコーダ
住所 → 緯度経度の変換器。 API or ローカル DB。
精度
番地レベル、 ブロックレベル、 市区町村レベル等。 用途で必要精度が違う。

🧮 実データで計算してみる

SSDSE 47 都道府県の県庁所在地に緯度経度を付与する例:

都道府県県庁所在地緯度経度
北海道札幌市43.06141.35
東京都新宿区35.69139.69
沖縄県那覇市26.21127.68

🐍 Python 実装

SSDSE-B-2026(47 都道府県・2023 年データ)を題材にした最小コード:

1
2
3
4
5
6
7
# GeoPy を使ったジオコーディング
from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent='ssdse-demo')
location = geolocator.geocode('東京都千代田区永田町1-7-1', timeout=10)
print(location.latitude, location.longitude)
# 35.6759, 139.7448

⚠️ よくある落とし穴

⚠️ API のレート制限
Nominatim は 1 秒 1 リクエスト。 大量バッチでは別 API を検討。
⚠️ 住所表記揺れ
「ヶ崎」と「が崎」、 全角半角の数字でヒットしない。 正規化前処理を入れる。
⚠️ 古い住所が消えている
市町村合併で旧住所がヒットしない。
⚠️ 座標系の不一致
緯度経度の 順序 (lat, lon vs lon, lat)と 座標系(WGS84 vs 旧日本測地系)に注意。
⚠️ 無料 API の使用規約違反
業務利用は商用 API(Google, Mapbox)を検討。

🌐 関連手法・この用語を使う論文

📄 地域分析を含む論文
都道府県・市区町村レベルの分析論文では緯度経度付与が前処理に登場します。

🧮 SSDSE-B-2026 を地図に重ねる(コロプレス)

SSDSE-B-2026 の都道府県名を国土交通省提供の都道府県界 GeoJSON とジオコーディングで結びつけ、 高齢化率のコロプレス地図を描く。

要素具体SSDSE-B での使い方
ジオコーディング住所→緯度経度地域コード(R01000 等)と GeoJSON のキーを突合
逆ジオコーディング緯度経度→住所GPS ログ→都道府県の集計
シェイプファイル.shp 形式の境界GADM, 国土数値情報
GeoJSONJSON ベース地理Web 描画用
MVTベクトルタイルMapbox/MapLibre
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# SSDSE-B-2026 で都道府県別高齢化率を地図化
import pandas as pd
import geopandas as gpd
import folium

# 1. SSDSE-B 読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df = df[df['年度']==2023].copy()
df['高齢化率'] = df['65歳以上人口']/df['総人口']*100

# 2. 都道府県境界 GeoJSON (例: 国土数値情報)
geo = gpd.read_file('data/raw/japan_prefectures.geojson')

# 3. 結合
merged = geo.merge(df[['都道府県','高齢化率']],
                   left_on='nam_ja', right_on='都道府県')

# 4. 地図化
m = folium.Map(location=[36, 138], zoom_start=5)
folium.Choropleth(
    geo_data=merged.__geo_interface__,
    data=merged, columns=['nam_ja','高齢化率'],
    key_on='feature.properties.nam_ja',
    fill_color='YlOrRd', fill_opacity=0.7,
    legend_name='高齢化率 (%)',
).add_to(m)
m.save('aged_ratio_map.html')

# 上位5県: 秋田(38.6), 高知(36.1), 山口(35.2), 徳島(34.7), 山形(34.6)
print(df.nlargest(5,'高齢化率')[['都道府県','高齢化率']])

🔬 ジオコーディングの精度と座標系

代表的なサービス

サービスコスト精度利用規約上の注意
Google Geocoding API従量課金地図表示と組み合わせ必須
Mapbox従量課金商用OK
国土地理院無料○ 日本特化商用OK・出典明記
OpenStreetMap (Nominatim)無料(共有)負荷制限あり、 商用は自前ホスト
jageocoder (Python)無料・オフライン○ 日本特化パッケージ単独で動作

座標系(CRS)の落とし穴

空間結合(spatial join)

点(緯度経度)が含まれるポリゴン(都道府県)を判定する操作。 geopandas の sjoin で実装。 SSDSE-B-2026 の市町村別データを使えば、 GPS ログから滞在都道府県を集計できる。

⚠️ 地理データの落とし穴

❌ 1. 住所表記の揺れ
「東京都千代田区1-1」「東京都千代田区一丁目1番」など。 正規化(半角化、 漢数字→アラビア数字)が必要。
❌ 2. 行政界の変更
市町村合併で 1999年→2010年で地名が消える。 SSDSE-B の集計を時系列比較するときは要注意。
❌ 3. 海岸線の解像度
簡略化された GeoJSON は瀬戸内海の小島が消える。 配信用と分析用で解像度を分ける。
❌ 4. 緯度経度の桁数
小数 7 桁で 1cm 精度。 個人住居が特定できるので公開時は丸め。
❌ 5. 北方領土・尖閣などの境界争い
GeoJSON によって含まれたり除外されたり。 公的データは国土地理院準拠が無難。