🌐
国土交通省が公開した交通量API活用ガイド
1. はじめに
本記事では、国土交通省が2025年5月12日に公開した「全国の直轄国道の交通量API」について解説します。このAPIを使えば、全国約2,600箇所で観測されている国道の交通量データにアクセスでき、様々なアプリケーションやサービス開発に役立てることができます。
2. APIの概要
国土交通省道路局は「xROAD(クロスロード)」の取組の一環として、道路関係データのオープン化を推進しており、その第一弾として、2025年5月12日より全国の直轄国道において機械観測されている方向別交通量データを取得できるAPIが公開されました。
このAPIには以下のような特徴があります:
- 全国約2,600箇所の直轄国道の交通量データにアクセス可能
- 常設型トラフィックカウンターとCCTV映像を活用したAI型トラフィックカウンターのデータを提供
- データは5分間値と1時間値で提供され、観測から約20分後に順次取得可能
- APIは無料で利用可能(利用規約への同意が必要)
3. データ内容
APIでは以下の4種類のデータが提供されてます:
- 常設トラカンの5分間交通量データ
- 常設トラカンの1時間交通量データ
- CCTVトラカン(画像認識型)の5分間交通量データ
- CCTVトラカン(画像認識型)の1時間交通量データ
各データには以下のような情報が含まれています:
- 観測地点の位置情報(緯度・経度)
- 観測日時
- 上り・下りの交通量(小型車、大型車、判別不能)
- 機器の状態(正常・異常)
4. 実際に呼び出してみる
Pythonを使って実際にAPIを呼び出してみます。ここでは、常設トラカンの5分間交通量データを取得する簡単なサンプルコードを紹介します。
import requests
import json
import pandas as pd
from dat
# APIのベースURL
base_url = "https://api.jartic-open-traffic.org/geoserver"
# リクエストパラメータの設定
params = {
'service': 'WFS',
'version': '2.0.0',
'request': 'GetFeature',
'typeNames': 't_travospublic_measure_5m', # 常設トラカンの5分間交通量
'srsName': 'EPSG:4326',
'outputFormat': 'application/json',
'exceptions': 'application/json',
# 東京・新宿付近の一般国道の交通量データを取得(2025年5月13日9:00のデータ)
'cql_filter': "道路種別='3' AND 時間コード=202505130900 AND BBOX(ジオメトリ,139.65,35.65,139.75,35.75,'EPSG:4326')"
}
# APIリクエストの実行
response = requests.get(base_url, params=params)
# ステータスコードのチェック
if response.status_code == 200:
# レスポンスがJSON形式であることを確認
data = response.json()
print(f"取得データ件数: {data.get('numberReturned', 0)}")
else:
print(f"エラー: {response.status_code}")
print(response.text)
# GeoJSONデータをデータフレームに変換
rows = []
for feature in data['features']:
props = feature['properties']
# 位置情報を追加
if 'geometry' in feature and feature['geometry']:
coords = feature['geometry']['coordinates'][0]
longitude, latitude = coords
props['longitude'] = longitude
props['latitude'] = latitude
rows.append(props)
# DataFrameに変換
df = pd.DataFrame(rows)
# データのプレビュー
print(df.head())
以下、出力例です:
地方整備局等番号 | 開発建設部/都道府県コード | 常時観測点コード | 収集時間フラグ(5分間/1時間) | 観測年月日 | 時間帯 | 上り・小型交通量 | 上り・大型交通量 | 上り・車種判別不能交通量 | 上り・停電 | 上り・ループ異常 | 上り・超音波異常 | 上り・欠測 | 下り・小型交通量 | 下り・大型交通量 | 下り・車種判別不能交通量 | 下り・停電 | 下り・ループ異常 | 下り・超音波異常 | 下り・欠測 | 道路種別 | 時間コード | longitude | latitude |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
83 | 3110600 | 1 | 20250513 | 900 | 126 | 15 | 10 | 0 | 0 | 0 | 0 | 97 | 14 | 4 | 0 | 0 | 0 | 0 | 3 | 202505130900 | 139.6833757 | 35.65003873 | |
83 | 3310920 | 1 | 20250513 | 900 | 93 | 18 | 7 | 0 | 0 | 0 | 0 | 55 | 9 | 5 | 0 | 0 | 0 | 0 | 3 | 202505130900 | 139.6969986 | 35.74888073 |
5. データの可視化例
取得したデータを地図上で可視化してみましょう。ここではfoliumライブラリを使います。
import folium
from folium.plugins import MarkerCluster
# 座標がある行だけを抽出
df_with_coords = df.dropna(subset=['latitude', 'longitude'])
# 地図の中心を計算
center_lat = df_with_coords['latitude'].mean()
center_lon = df_with_coords['longitude'].mean()
# 地図の作成
m = folium.Map(location=[center_lat, center_lon], zoom_start=12)
# マーカークラスターの作成
marker_cluster = MarkerCluster().add_to(m)
# 交通量ポイントを地図に追加
for idx, row in df_with_coords.iterrows():
# ポップアップに表示する情報を作成
popup_text = f"""
<b>観測地点 ID:</b> {row.get('常時観測点コード', 'N/A')}<br>
<b>上り小型車:</b> {row.get('上り・小型交通量', 'N/A')} 台/5分<br>
<b>上り大型車:</b> {row.get('上り・大型交通量', 'N/A')} 台/5分<br>
<b>下り小型車:</b> {row.get('下り・小型交通量', 'N/A')} 台/5分<br>
<b>下り大型車:</b> {row.get('下り・大型交通量', 'N/A')} 台/5分<br>
"""
folium.Marker(
location=[row['latitude'], row['longitude']],
popup=folium.Popup(popup_text, max_width=300),
icon=folium.Icon(color='blue')
).add_to(marker_cluster)
# 地図を保存
m.save("traffic_map.html")
以下、可視化の例です。
6. APIの活用アイデア
このAPIを活用することで、以下のようなサービスやアプリケーションに発展させること可能になります。
-
リアルタイム交通状況アプリ
- 現在の交通量をリアルタイムで表示し、渋滞箇所を予測
-
最適ルート提案サービス
- 過去の交通量データから曜日・時間帯ごとの傾向を分析し、最適なルートと出発時刻を提案
-
都市計画・交通政策支援ツール
- 交通量の時間的・空間的変化を分析し、都市計画や交通政策の立案をサポート
-
物流最適化システム
- 配送ルートの最適化や到着時間の予測精度向上に活用
-
AIと組み合わせた交通予測モデル
- 交通量データと気象データなどを組み合わせて高精度な交通予測モデルを構築
7. まとめ
今回、国土交通省が公開した交通量APIは、交通・物流・都市計画など様々な分野での活用が期待できます。無料で利用できるという点も魅力的です。また、レスポンスも早い印象です。
※APIの詳細情報は以下のリンクから確認できます:
Discussion