xROAD常時観測交通量(国管理道路)データ取得
May 16, 2025·
·
3 min read

金田 佑哉
はじめに
先日国土交通省から「道路データプラットフォーム xROAD」というデータプラットフォームが公開されました。 日頃、業務で道路に関するデータ分析をしていることもあり、まずは触ってみた次第です。
(まずページがかっちょ良い)
DATABASE/常時観測交通量(国管理道路)
DATABASEページにて公開されているデータを検索できます。 今回は「常時観測交通量(国管理道路)」のデータを取得してみました。
データ詳細
全国の国の管理区間に設置されたトラフィックカウンター(画像認識型を含む)により観測した交通量データです。
詳しくは下記のページにて記載されています。
https://www.jartic-open-traffic.org/
様式名 | 観測方法 | 集計単位 | 生成タイミング | 検索可能期間 |
---|---|---|---|---|
様式1 | 常設トラカン※1 | 5分間交通量 | 観測後約20分後 | 過去1ヶ月分 |
様式2 | 常設トラカン※1 | 1時間交通量 | 観測後毎時約20分後 | 過去3ヶ月分 |
様式3 | CCTVトラカン※2 | 5分間交通量 | 観測後約20分後 | 過去1ヶ月分 |
様式4 | CCTVトラカン※2 | 1時間交通量 | 観測後毎時約20分後 | 過去3ヶ月分 |
※1:常設トラカンとは、超音波式等の観測用機器を現地に設置し、自動的に交通量観測を行うタイプのトラフィックカウンターです。
※2:CCTVトラカンとは、道路管理用のCCTVカメラの画像からAIで、自動的に交通量観測を行うタイプのトラフィックカウンターです。
APIの仕様は下記のpdfに記載されています。
https://www.jartic-open-traffic.org/action_method.pdf
データ取得方法
ほぼ結論ですが、下記のようなコードで取得できます。
あらかじめ、 requests, geopandas
はサードパーティのモジュールであるため、installしてください。
import requests
import geopandas as gpd
# APIエンドポイントとパラメータ
url = "https://api.jartic-open-traffic.org/geoserver"
params = {
"service": "WFS",
"version": "2.0.0",
"request": "GetFeature",
"typeNames": "t_travospublic_measure_1h", # 1時間値(5mだと5分間交通量)
"srsName": "EPSG:4326",
"outputFormat": "application/json",
"exceptions": "application/json",
"cql_filter": (
"道路種別 = 3 AND " # これが国道らしい(1が高速道路)
"時間コード >= 202505150000 AND "
"時間コード <= 202505160000 AND " # 保存期間があるので、ご自身の取得したい機関によって取得できない可能性もあります
"BBOX(ジオメトリ, 139.15, 35.141, 139.32, 35.56, 'EPSG:4326')" # 東京周辺
)
}
response = requests.get(url, params=params)
response.raise_for_status()
# GeoDataFrame化 + CRS設定
gdf = gpd.GeoDataFrame.from_features(response.json()["features"])
gdf.set_crs("EPSG:4326", inplace=True)
gdf.head()
出力
geometry 地方整備局等番号 開発建設部/都道府県コード 常時観測点コード 収集時間フラグ(5分間/1時間) 観測年月日 時間帯 上り・小型交通量 上り・大型交通量 上り・車種判別不能交通量 上り・停電 上り・ループ異常 上り・超音波異常 上り・欠測 下り・小型交通量 下り・大型交通量 下り・車種判別不能交通量 下り・停電 下り・ループ異常 下り・超音波異常 下り・欠測 道路種別 時間コード
0 MULTIPOINT ((139.30775 35.30798)) 83 3110030 2 20250515 100 31 1 6 0 0 0 0 35 4 1 0 0 0 0 3 202505150100
1 MULTIPOINT ((139.20329 35.37445)) 83 3110640 2 20250515 100 75 40 3 0 0 0 0 66 28 6 0 0 0 0 3 202505150100
2 MULTIPOINT ((139.30775 35.30798)) 83 3110030 2 20250515 200 29 4 3 0 0 0 0 26 3 0 0 0 0 0 3 202505150200
3 MULTIPOINT ((139.20329 35.37445)) 83 3110640 2 20250515 200 37 43 2 0 0 0 0 42 36 7 0 0 0 0 3 202505150200
4 MULTIPOINT ((139.30775 35.30798)) 83 3110030 2 20250515 0 43 4 2 0 0 0 0 42 7 3 0 0 0 0 3 202505150000
見にくいので、 tabulate
をinstallして
print(gdf.head().to_markdown())
出力
geometry | 地方整備局等番号 | 開発建設部/都道府県コード | 常時観測点コード | 収集時間フラグ(5分間/1時間) | 観測年月日 | 時間帯 | 上り・小型交通量 | 上り・大型交通量 | 上り・車種判別不能交通量 | 上り・停電 | 上り・ループ異常 | 上り・超音波異常 | 上り・欠測 | 下り・小型交通量 | 下り・大型交通量 | 下り・車種判別不能交通量 | 下り・停電 | 下り・ループ異常 | 下り・超音波異常 | 下り・欠測 | 道路種別 | 時間コード | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | MULTIPOINT ((139.30775 35.30798103)) | 83 | 3110030 | 2 | 20250515 | 100 | 31 | 1 | 6 | 0 | 0 | 0 | 0 | 35 | 4 | 1 | 0 | 0 | 0 | 0 | 3 | 202505150100 | |
1 | MULTIPOINT ((139.203293 35.37445003)) | 83 | 3110640 | 2 | 20250515 | 100 | 75 | 40 | 3 | 0 | 0 | 0 | 0 | 66 | 28 | 6 | 0 | 0 | 0 | 0 | 3 | 202505150100 | |
2 | MULTIPOINT ((139.30775 35.30798103)) | 83 | 3110030 | 2 | 20250515 | 200 | 29 | 4 | 3 | 0 | 0 | 0 | 0 | 26 | 3 | 0 | 0 | 0 | 0 | 0 | 3 | 202505150200 | |
3 | MULTIPOINT ((139.203293 35.37445003)) | 83 | 3110640 | 2 | 20250515 | 200 | 37 | 43 | 2 | 0 | 0 | 0 | 0 | 42 | 36 | 7 | 0 | 0 | 0 | 0 | 3 | 202505150200 | |
4 | MULTIPOINT ((139.30775 35.30798103)) | 83 | 3110030 | 2 | 20250515 | 0 | 43 | 4 | 2 | 0 | 0 | 0 | 0 | 42 | 7 | 3 | 0 | 0 | 0 | 0 | 3 | 202505150000 |
結構データもたくさんありそうなので、使い道はありそう。
(自分のHPではtableのスクロールができないっぽくて、返ってmarkdownの方がわかりにくくなったかも)
また、CQLというクエリ方法を初めて知った。 画像認識って方法で取得されたデータもあるが、自分はなんなのかわからないです。