xROAD常時観測交通量(国管理道路)データ取得

May 16, 2025·
金田 佑哉
金田 佑哉
· 3 min read

はじめに

先日国土交通省から「道路データプラットフォーム xROAD」というデータプラットフォームが公開されました。 日頃、業務で道路に関するデータ分析をしていることもあり、まずは触ってみた次第です。

(まずページがかっちょ良い)

DATABASE/常時観測交通量(国管理道路)

DATABASEページにて公開されているデータを検索できます。 今回は「常時観測交通量(国管理道路)」のデータを取得してみました。

データ詳細

全国の国の管理区間に設置されたトラフィックカウンター(画像認識型を含む)により観測した交通量データです。 詳しくは下記のページにて記載されています。
https://www.jartic-open-traffic.org/

様式名観測方法集計単位生成タイミング検索可能期間
様式1常設トラカン※15分間交通量観測後約20分後過去1ヶ月分
様式2常設トラカン※11時間交通量観測後毎時約20分後過去3ヶ月分
様式3CCTVトラカン※25分間交通量観測後約20分後過去1ヶ月分
様式4CCTVトラカン※21時間交通量観測後毎時約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時間)観測年月日時間帯上り・小型交通量上り・大型交通量上り・車種判別不能交通量上り・停電上り・ループ異常上り・超音波異常上り・欠測下り・小型交通量下り・大型交通量下り・車種判別不能交通量下り・停電下り・ループ異常下り・超音波異常下り・欠測道路種別時間コード
0MULTIPOINT ((139.30775 35.30798103))83311003022025051510031160000354100003202505150100
1MULTIPOINT ((139.203293 35.37445003))8331106402202505151007540300006628600003202505150100
2MULTIPOINT ((139.30775 35.30798103))83311003022025051520029430000263000003202505150200
3MULTIPOINT ((139.203293 35.37445003))8331106402202505152003743200004236700003202505150200
4MULTIPOINT ((139.30775 35.30798103))833110030220250515043420000427300003202505150000

結構データもたくさんありそうなので、使い道はありそう。
(自分のHPではtableのスクロールができないっぽくて、返ってmarkdownの方がわかりにくくなったかも)

また、CQLというクエリ方法を初めて知った。 画像認識って方法で取得されたデータもあるが、自分はなんなのかわからないです。