Lesson 74

走行注意区間 単独 3 研究例分析 — 381 区間 / 1078 km / 3 階層情報伝達 (L50/L73/L74) + 3 重指定 69 件 を読む

L74走行注意区間予防情報配信制度落石注意rakuseki_03rakuseki_04注意レベル情報配信制度3 階層情報伝達逆ピラミッド構造制度階層注意 ⊃ 規制3 重指定RQ×3Format BgeopandasLineString (NDJSON)L50連携 (動的規制)L72連携 (緊急輸送道路)L73連携 (事前通行規制)中山間集中
所要 50 分 / 想定レベル: 中級 / データ: DoBoX dataset 1246 (ZIP × 1, ~757 KB)

データ取得手順

⚠️ このスクリプトは自動取得に対応していません。以下のデータセットを DoBoX から手動でダウンロードし、data/extras/ 以下に保存してください。

IDデータセット名
#333dataset #333
#888都市計画区域情報_区域データ_安芸高田市_行政区域
#1246走行注意区間

実行コマンド:

cd "2026 DoBoX 教材"
python -X utf8 lessons/L74_caution_segments.py

DoBoX のオープンデータは申請不要・商用/非商用とも利用可。 data/extras/.gitignore 対象(約 57 GB のキャッシュ)。 スクリプト実行で自動再生成されます。

学習目標と問い

本記事の対象 — 「走行注意区間」 1 件 単独分析

本記事は DoBoX のデータセット 「走行注意区間」 (dataset 1246) 1 件を 単独で取り上げ、 広島県の走行注意区間 381 区間 / 総延長 1078 km3 つの独立した研究角度で並列に分析する記事である。 他のシリーズ (事前通行規制 L73 / 道路規制 L50 / 緊急輸送道路 L72) と 本記事は 合体しない。 RQ2 で事前通行規制 (L73)、 RQ3 で L50 + L73 + L72 を参照するが、 これは「県の道路情報 3 階層の量的実証」 を明らかに するための既扱データの従属的参照に留め、 本記事の主軸はあくまで 走行注意区間 1 dataset の分析である。

「走行注意区間」 とは:
通行止めにはしないが、 ドライバーに「落石・崩落リスクあり」 を予告する 道路区間。 過去の小規模崩落履歴・地質脆弱性・植生状態等から道路管理者が 指定し、 注意喚起レベルに応じて2 階層で運用される広島県独自の 「予防情報配信制度」。 法的拘束力 (規制) はないが、 道路法第 30 条の 2 に 基づく道路情報提供の一環として運用される。

広島県の走行注意区間は2 階層 (orange/red)に区分される:
  • 階層 03 (orange, #ffa500): 注意レベル — 253 区間 / 708 km。 通常走行可、 雨天時・夜間に減速注意
  • 階層 04 (red, #ff0000): 注意レベル — 128 区間 / 370 km。 常時注意、 通行は可能だが豪雨時・地震後は迂回推奨
本記事の主要発見 (3 RQ):
  • RQ1: 県の走行注意区間は381 区間 / 1078 km。 低注意 (03) が 253 件 (66.4%)と多数派、 高注意 (04) は 128 件。 中山間山地に 172 件 (45.1%) が集中。
  • RQ2: L74 (注意) と L73 (事前通行規制) の重複は 181 件 / 389.1 km。 残り 52.5%が「注意のみ」 区間 = L74 は L73 より広い予防 情報層という制度階層が確認された。
  • RQ3: 県の道路情報 3 階層はL74 注意 (381) > L50 動的 (218) > L73 静的規制 (164)の逆ピラミッド構造。 L74 ∩ L72 重複 394.6 km、 3 重指定 (L74∩L73∩L72) 69 件が「制度的最警戒箇所」。

独自に定義する用語 (本記事限定)

研究の問い (3 RQ)

  1. RQ1 (主研究): 広島県の走行注意区間の構造 — 注意レベル × 区間長 × 地理クラス × 市町はどう描けるか? 381 区間を 4 軸で集計し、 「県の 予防情報配信制度」 の物理形状を初めて系統的に記述する。 H1 (orange ≥ 60%) を 検証。
  2. RQ2 (副研究 1): 走行注意区間 (L74, 弱予防) と事前通行規制区間 (L73, 強予防) は階層構造を成すか? 100m バッファ sjoin で重複 + 「注意のみ」 区間を分離し、 制度階層の連続性を実証する。 H2 (重複 ≥ 10), H3 (注意のみ ≥ 80%) を検証。
  3. RQ3 (副研究 2): 県の道路情報3 階層 (L50/L73/L74)はどんな 統合構造を持つか? 件数規模・延長・空間分布を統合分析し、 緊急輸送道路 (L72) との重複も含めて 3 重指定箇所を特定。 H4 (件数 注意>動的>規制), H5 (L74 ∩ L72 ≥ 20 km) を検証。

仮説 (5)

到達点

本記事を読み終えると、 (1) 県の走行注意区間 381 区間・1078 km・ 2 階層 (低注意 03 + 高注意 04) の制度構造を完全に俯瞰、 (2) 事前通行規制 (L73) との 181 件重複 + 「注意のみ」 52.5% という2 層の制度階層を 定量把握、 (3) 県の道路情報 3 階層 (L50/L73/L74) の逆ピラミッド構造と 緊急輸送道路 (L72) との3 重指定箇所 69 件を特定できる、 という 3 段階の知識が獲得できる。 これにより県の道路情報配信制度における「弱い情報の 広い層 (注意) → 強い規制の狭い層 (規制)」という制度設計が研究者視点で見える ようになる。

使用データ

本研究で使う 1 つの dataset (1 ZIP リソース) を以下の表に示す。 本データは走行注意区間 LineString を ZIP 形式 (.json 拡張子で配信) で 公開しており、 ZIP 内に階層別 NDJSON 風 JSON 2 つ + メタ JSON 1 つ の 合計 3 ファイルが格納されている。

データセット仕様

項目
dataset_id 1246
公式名 走行注意区間
公式説明 広島県が管理する道路の走行注意区間情報
リソース数 1 (ZIP, 拡張子は .json で配信)
リソース ID 32490
ZIP サイズ 774,763 byte (~757 KB)
ZIP 内 ファイル 04_warning_rakuseki_03.json + _04.json + 04_warning_route.json
形式 NDJSON 風 (1 配列 = 1 LineString) + メタ JSON
レコード数 381 区間 (03=253 / 04=128)
総延長 1078.2 km
座標系 (元) WGS84 (EPSG:4326) → 本記事 EPSG:6671 で処理
階層 rakuseki_03 (低注意, orange) / rakuseki_04 (高注意, red)
配信日 (フォルダ名) 2022-09-08-T00:00:00 (公式 stamp)
ライセンス クリエイティブ・コモンズ表示 (CC-BY)
URL https://hiroshima-dobox.jp/datasets/1246
作成主体 広島県 (土木建築局道路整備課・防災担当)

ZIP 内 3 JSON の内訳

ファイル役割形式件数延長 km
04_warning_rakuseki_03.json 低注意 (orange) LineString 集 NDJSON 風 (1 配列 = 1 LineString, 「,」 区切り) 253 区間 708.4
04_warning_rakuseki_04.json 高注意 (red) LineString 集 NDJSON 風 128 区間 369.8
04_warning_route.json 階層メタ ({name, color, weight, type}) NDJSON 風 (2 オブジェクト) 2 階層 (rakuseki_03 + 04) -

NDJSON 風 形式の解読

各階層 JSON は以下のような形式 (改行・インデント整形は本記事による):

[{"e":132.10052,"d":34.39173}, {"e":132.10042,"d":34.39177}, ...]
,
[{"e":132.10120,"d":34.39250}, {"e":132.10115,"d":34.39260}, ...]
,
...

つまり「[配列] が「,改行」 区切りで複数並ぶ」形式。 標準 JSON では ないので json.load() でそのまま読めない。 L72 緊急輸送道路と同じ 「[ + 全テキスト + ]」でラップしてから json.loads() で 配列の配列として読み込む。 各内部配列が 1 LineString に対応し、 各点は {"e": 経度, "d": 緯度}形式。

JSON 解読の注意点

ダウンロード

本記事の再現に必要なすべてを直リンクで提供する。 HTML だけ読めば学習者が完全再現できることが目標 (要件 A)。

生データ (DoBoX 1 件)

このスクリプト本体

中間 CSV (本記事生成、再利用可)

図 (PNG, 直 DL 可)

【RQ1】 走行注意区間の構造 — 注意レベル × 区間長 × 地理 / 381 区間 / 1078 km / 03 シェア 66.4%

狙い (RQ1)

RQ1 では「県の予防情報配信制度」 の物理構造を初めて系統的に記述する。 具体的には 381 区間 / 総延長 1078 km の走行注意区間を 注意レベル (03/04) × 区間長 × 地理クラス × 市町の 4 軸で集計し、 「どのレベルがどこに分布するか」 を 1 枚で俯瞰できるようにする。 H1 (orange ≥ 60%) は階層構造の中心仮説を検証する。

手法 — 4 ステップ

  1. STEP 1: ZIP 展開 + NDJSON 風 パース
    公式リソースは拡張子 .jsonだが実体はZIP。 magic 判定 (50 4B 03 04) で確認後、 zipfile で展開する。 中の JSON はNDJSON 風([配列] が「,改行」 区切りで複数並ぶ) 形式なので、 "[" + text + "]" でラップしてから json.loads() で配列の配列として読む。 L72 と同じパターン。
  2. STEP 2: LineString 化 + 投影変換
    各内部配列の点 ({"e": lon, "d": lat}) を shapely.geometry.LineString に変換、 階層名 (rakuseki_03 / rakuseki_04) と組み合わせて GeoDataFrame に。 EPSG:4326 → EPSG:6671 (JGD2011 第 III 系) に to_crs() で投影変換 → 距離・面積が m 単位で計算可能に。
  3. STEP 3: 派生列の追加
    level_label: 階層名を「03 (低注意) / 04 (高注意)」 に変換
    len_m, len_km: 区間長 (= LineString.length)
    seg_id: 派生主キー (L74_0000 〜 L74_0380)
  4. STEP 4: 4 軸で集計 + 中山間判定
    代表点 sjoin で市町判定 → 中山間 7-8 市町 vs 平野・沿岸都市 vs 沿岸島嶼を 区別。 groupby("level") で階層別、 groupby("地理クラス") で 地理別、 groupby("市町名") で市町別の集計。

実装 (主要部のみ抜粋)

L74_caution_segments.py 行 1539–1626

 1
 2
 3
 4
 5
 6
 7
 8
 9
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
import zipfile, json
from pathlib import Path
import geopandas as gpd
from shapely.geometry import LineString
import pandas as pd

DATA_DIR = Path("data/extras/L74_caution_segments")
EXTRACT = DATA_DIR / "340006_driving_caution_section_20220908T000000"

# (1) ZIP 展開 (拡張子 .json だが実体 ZIP)
zip_path = DATA_DIR / "caution_segments.json"
if zip_path.read_bytes()[:4] == b"PK\x03\x04" and not EXTRACT.exists():
    with zipfile.ZipFile(zip_path) as z:
        z.extractall(DATA_DIR)

# (2) NDJSON 風 → LineString 配列
def load_caution_lines(level):
    p = EXTRACT / f"04_warning_{level}.json"
    text = p.read_text(encoding="utf-8")
    arr = json.loads("[" + text + "]")  # NDJSON 風: 配列の配列としてラップ
    return [LineString([(pt["e"], pt["d"]) for pt in seg])
            for seg in arr if len(seg) >= 2]

records = []
for lvl in ["rakuseki_03", "rakuseki_04"]:
    for ln in load_caution_lines(lvl):
        records.append({"level": lvl, "geometry": ln})

# (3) GeoDataFrame 化 (4326 → 6671 投影変換)
gdf = gpd.GeoDataFrame(records, crs="EPSG:4326").to_crs("EPSG:6671")
gdf["len_m"] = gdf.geometry.length
gdf["len_km"] = gdf["len_m"] / 1000
print(f"区間数: {len(gdf)}")

# (4) 階層別 集計
T_level = (gdf.groupby("level")
                  .agg(区間数=("level", "count"),
                       延長_km=("len_km", "sum"))
                  .reset_index())
print(T_level)

結果 1: 県全域 注意レベル別 マップ (図 1)

なぜこの図か: 2 階層の注意レベル (03 = orange / 04 = red) が県内に どう分布するかを県全域地図に重ねて一目で確認したい。 注意レベルを 色 + 線幅で区別 (03 = orange 細, 04 = red 太) することで、 「中山間 + 沿岸の 脆弱地質道路」に注意区間が集中することが直感できる。

図 1 (RQ1): 広島県 走行注意区間 注意レベル別マップ
図 1 (RQ1): 広島県 走行注意区間 注意レベル別マップ

図 1 から読み取れること:

結果 2: 階層 + 区間長 + 地理クラス 3 角度 (図 2)

なぜこの図か: H1 (03 ≥ 60%) を直感検証するために、 階層別件数を 最初のパネルで確認。 区間長は対数スケールで広く分布する想定なので 2 番目の パネルで log10 ヒストで階層別の分布を見る。 3 番目で地理クラス別件数を見て、 中山間集中度を量化する。

図 2 (RQ1): 階層 × 区間長 × 地理クラス
図 2 (RQ1): 階層 × 区間長 × 地理クラス

図 2 から読み取れること:

結果 3: 中山間境界 + 注意区間 重ね合わせマップ (図 3)

なぜこの図か: 図 2 の中山間集中を地図上で直感検証するため、 中山間 8 市町を橙色背景、 沿岸島嶼を青色背景で塗り、 注意区間を中山間内 (橙=03 / 赤=04) / それ以外 (灰) で色分けして重ねる。 「中山間にどれだけ集中するか」 が 一目で見える。

図 3 (RQ1): 走行注意 + 中山間境界 重ね合わせ
図 3 (RQ1): 走行注意 + 中山間境界 重ね合わせ

図 3 から読み取れること:

結果 4: 階層・地理・市町 詳細表

注意レベル別サマリ:

階層 level_label 区間数 延長_km 平均長_m 中央長_m 最大長_m シェア_%
rakuseki_03 03 (低注意) 253 708.4 2800.0 2976.0 5926.0 66.4
rakuseki_04 04 (高注意) 128 369.8 2889.0 2975.0 3240.0 33.6

注意レベル 表から読み取れること: 03 が 253 件 (66.4%) / 延長 708.4 km、 04 が 128 件 / 369.8 km。 平均長は 03 が 2800 m、 04 が 2889 m と、 04 のほうが長い (= 強注意は連続した長区間で運用)。

地理クラス別サマリ:

地理クラス 区間数 延長_km シェア_%
平野・沿岸都市 199 563.4 52.2
中山間山地 172 487.4 45.1
沿岸島嶼 10 27.4 2.6

地理クラス 表から読み取れること: 平野・沿岸都市 が 199 件 (52.2%)と最多、 2 位 中山間山地 が 172 件 (45.1%)。 注意区間は地形脆弱な領域に 明確に偏り、 平野・沿岸都市は少数。

注意レベル × 地理クラス クロス:

地理クラス level_label 中山間山地 平野・沿岸都市 沿岸島嶼
03 (低注意) 111 135 7
04 (高注意) 61 64 3

クロス 表から読み取れること: 03 と 04 の地理クラス分布は概ね同パターン (中山間 + 沿岸島嶼集中) だが、 04 (高注意) は 03 (低注意) よりやや中山間集中度が高い傾向 — 強い注意は 最も脆弱な地形に厳選指定される。

市町別サマリ (Top 15):

市町名 地理クラス 区間数 延長_km
庄原市 中山間山地 83 236.2
不明 (代表点が県外/海上) 平野・沿岸都市 73 200.1
呉市 平野・沿岸都市 38 109.9
廿日市市 平野・沿岸都市 31 89.0
福山市 平野・沿岸都市 31 88.8
三次市 中山間山地 30 86.9
安芸高田市 中山間山地 21 58.3
安芸太田町 中山間山地 18 48.6
府中市 中山間山地 16 45.5
東広島市 平野・沿岸都市 12 34.3
江田島市 沿岸島嶼 10 27.4
三原市 平野・沿岸都市 4 12.1
大竹市 平野・沿岸都市 4 11.6
世羅町 中山間山地 4 11.9
尾道市 平野・沿岸都市 4 11.6

市町別 表から読み取れること: 庄原市 (83 件)が圧倒的最多、 2 位 不明 (代表点が県外/海上) (73 件)、 3 位 呉市 (38 件)。 中山間市町 (庄原・三次・安芸太田・北広島・神石高原・世羅・府中) と沿岸島嶼 (江田島・大崎上島) が上位を独占。

区間長 代表値 (階層別):

カテゴリ 平均_m 中央_m 最大_m
全体 2830.0 2976.0 5926.0
03 (低) 2800.0 2976.0 5926.0
04 (高) 2889.0 2975.0 3240.0

区間長 表から読み取れること: 平均長は 03 で約 2800 m、 04 で約 2889 m。 最大は 03 で 5926 m、 04 で 3240 m と ともに数 km 級。 中央値は数百 m で、 連続した山岳路線への面的指定が支配的。

【RQ2】 事前通行規制 (L73) との階層構造 — 注意 ⊃ 規制 / 重複 181 / 注意のみ 52.5%

狙い (RQ2)

RQ1 で「注意区間の構造」 が分かったが、 これはL74 単独の話。 RQ2 では「L74 (注意, 弱) と L73 (規制, 強) の制度階層」を見る。 具体的には(1) L74 ∩ L73 の重複箇所(同じ道路に二重指定)、 (2) 「注意のみ」 区間の比率(L74 が L73 をカバーするか) を計算し、 「注意 = 広い情報層, 規制 = 狭い強制層」 という2 層の制度階層を実証する。 H2 (重複 ≥ 10) と H3 (注意のみ ≥ 80%) の 2 仮説を検証する。

手法 — L73 100m バッファ + sjoin (intersects)

狙い: L73 (164 区間 / 750 km) に対して100m バッファを作成 (= 道路敷地 + 隣接路面の余裕)、 L74 LineString を gpd.sjoin(predicate="intersects") で重なり判定。 重複延長は L74 LineString と L73 バッファ union の intersectionを計算。

項目意味
L74 走行注意 381 区間 / 1078 km 本記事の主データ
L73 事前通行規制 (既扱) 164 区間 / 750 km 強い予防制度 (雨量基準で自動規制)
バッファ幅 100 m 道路敷地 + 隣接路面の余裕
重複判定 sjoin (intersects) 1 注意区間が L73 buffer に少しでも掛かれば重複
重複延長 L73 buffer union との intersection length 実際の重複 km

注意: なぜ 100m バッファか — L73 の道路敷地 (典型 4-15m) + L74 とは 配信時期が違う (L73 = 2026-05-01, L74 = 2022-09-08) ため、 同じ道路でも ベクトル幾何が完全には一致しない可能性。 100m バッファは「同じ路線・同じ 区間と判定するための寛容な閾値」。 L73 の RQ3 で使った 30m バッファより 広いのは、 L74 の地理測位精度を控えめに見積もるため。

実装 (主要部)

L74_caution_segments.py 行 1740–1812

 1
 2
 3
 4
 5
 6
 7
 8
 9
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
# L73 事前通行規制区間を読み込み LineString 化
import json
from shapely import wkt as swkt

with open("data/extras/L73_pre_traffic_restriction/pre_traffic.json",
          "r", encoding="utf-8") as f:
    raw = json.load(f)
recs = raw["results"]
geoms_l73 = []
for r in recs:
    try:
        geoms_l73.append(swkt.loads(r.get("kukanroot") or r.get("kukan", "")))
    except Exception:
        geoms_l73.append(None)
gdf_l73 = gpd.GeoDataFrame({"id": [r["id"] for r in recs],
                            "naiyo": [r["kiseinaiyo"] for r in recs]},
                           geometry=geoms_l73, crs="EPSG:4326")
gdf_l73 = gdf_l73[gdf_l73.geometry.notna()].to_crs("EPSG:6671")

# L73 100m バッファ → L74 と sjoin (intersects)
gdf_l73_buf = gdf_l73.copy()
gdf_l73_buf["geometry"] = gdf_l73.geometry.buffer(100)
overlap = gpd.sjoin(gdf, gdf_l73_buf, how="left", predicate="intersects")
overlap_grp = (overlap.dropna(subset=["index_right"])
               .groupby("seg_id").size())
gdf["on_l73"] = gdf["seg_id"].map(overlap_grp).fillna(0).astype(bool)
print(f"L74 ∩ L73 重複: {gdf['on_l73'].sum()}/{len(gdf)} 区間")

# 重複延長 (L74 LineString と L73 buffer union の intersection)
buf_union = gdf_l73_buf.geometry.union_all()
gdf["overlap_km"] = gdf.geometry.apply(
    lambda g: g.intersection(buf_union).length / 1000)
print(f"重複延長: {gdf['overlap_km'].sum():.1f} km")

結果 1: L74 ∩ L73 重ね合わせマップ (図 4)

なぜこの図か: 「L74 注意区間と L73 規制区間がどこで重なるか」 を 地図で直接見せる。 L73 (背景の薄青)、 L74 単独 (橙), L74 ∩ L73 (赤太線+★) の 3 段階色分けで、 二重指定箇所が最警戒地点として浮き上がる。

図 4 (RQ2): L74 走行注意 + L73 事前通行規制 重ね合わせ
図 4 (RQ2): L74 走行注意 + L73 事前通行規制 重ね合わせ

図 4 から読み取れること:

結果 2: 階層別重複率 + 規制内容クロス (図 5)

なぜこの図か: H2 (重複 ≥ 10) を 2 角度から検証: (1) 注意レベル別に 重複率を見て「03/04 のどちらが規制と重なりやすいか」, (2) 重複先の L73 規制内容 分布を見て「注意 + 規制が共起する規制種類」 を量化する。

図 5 (RQ2): 階層別重複率 + 規制内容クロス
図 5 (RQ2): 階層別重複率 + 規制内容クロス

図 5 から読み取れること:

結果 3: 重複 詳細表

L74 階層別 L73 重複:

level_label 区間数 重複ありL73 重複_km 重複率_%
03 (低注意) 253 103 204.83 40.7
04 (高注意) 128 78 184.23 60.9

階層別 表から読み取れること: 03 (低注意) と 04 (高注意) で L73 重複率が異なり、 04 のほうが重複率が 高い。 これは「強注意 (04) は規制 (L73) 指定に近い」 という制度階層の連続性を示す。

L74 ∩ L73 重複箇所 詳細 (Top 15):

seg_id level level_label 市町名 地理クラス len_km l73_n_match l73_naiyo_match l73_type_match overlap_l73_km on_l72 l72_label
L74_0002 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 5.926 2 落石等 jizen 2.984 False (なし)
L74_0003 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 2.874 2 冠水, 落石等 jizen 2.406 True 第2次
L74_0004 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 2.955 1 落石等 jizen 2.542 False (なし)
L74_0007 rakuseki_03 03 (低注意) 大竹市 平野・沿岸都市 2.994 2 落石等 jizen 1.498 True 第2次
L74_0008 rakuseki_03 03 (低注意) 大竹市 平野・沿岸都市 2.994 1 落石等 jizen 2.994 True 第2次
L74_0010 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 2.993 1 落石等 jizen 2.351 True 第2次
L74_0012 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 2.940 1 落石等 jizen 1.497 False (なし)
L74_0013 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 1.025 2 落石等 jizen 1.025 False (なし)
L74_0014 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 1.927 2 凍結等, 落石等 jizen, winter 1.927 True 第2次
L74_0015 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 2.931 2 凍結等, 落石等 jizen, winter 0.680 False (なし)
L74_0019 rakuseki_03 03 (低注意) 江田島市 沿岸島嶼 1.812 1 落石等 jizen 0.101 False (なし)
L74_0020 rakuseki_03 03 (低注意) 江田島市 沿岸島嶼 2.941 1 落石等 jizen 0.619 False (なし)
L74_0021 rakuseki_03 03 (低注意) 安芸高田市 中山間山地 2.972 1 落石等 jizen 0.817 True 第3次
L74_0022 rakuseki_03 03 (低注意) 安芸高田市 中山間山地 1.538 1 落石等 jizen 1.538 True 第1次
L74_0028 rakuseki_03 03 (低注意) 安芸高田市 中山間山地 2.993 1 落石等 jizen 2.289 True 第3次

重複箇所 表から読み取れること: これら181 区間は「常時=注意 (L74) / 異常時=規制 (L73)」 の 切替運用がされる制度階層の最警戒箇所。 全件 CSV (L74_overlap_l73_segments.csv) で詳細を提供 — これらの箇所は 注意+規制の連続性のフィールド検証研究の対象として直接利用可能。

【RQ3】 県の道路情報 3 階層 (L50/L73/L74) + L72 — 逆ピラミッド構造 / 3 重指定 69 件

狙い (RQ3)

RQ2 で「L74 と L73 の 2 層階層」 を見たが、 これでも県の道路情報を完全には 描けない。 県にはもう 1 層がある: L50 動的規制 (本日 + 今後)。 RQ3 ではL50 + L73 + L74 の 3 階層を統合的に分析し、 さらに緊急輸送道路 (L72) との空間相関を見ることで、 県の道路情報配信制度全体を量的に俯瞰する。 H4 (件数 注意>動的>規制) と H5 (L74 ∩ L72 ≥ 20km) を検証する。

手法 — 3 階層件数 + L72 30m バッファ重複

狙い: (1) L50 (1257 + 1258, 動的規制 218 件) を読み込んで 件数比較、 (2) L72 緊急輸送道路 (630 セグ / 2789 km) に対して 30m バッファを作成、 L74 LineString と sjoin で重複判定 + intersection で重複延長計算。 (3) 4 カテゴリ (L74 単独 / ∩L73 / ∩L72 / 3 重) で集計。

階層件数性質規制力
L50 動的規制 (本日+今後) 218 件 (69+149) 短期 (~数日)・工事 + 災害短期 強 (通行止/片側交互/車線規制)
L73 事前通行規制 (静的) 164 件 恒常・雨量閾値超過で発動 強 (発動時 通行止)
L74 走行注意 (静的) 381 件 恒常・落石注意の情報提供 弱 (法的強制なし、 注意喚起のみ)

実装 (主要部)

L74_caution_segments.py 行 1894–1976

 1
 2
 3
 4
 5
 6
 7
 8
 9
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
# L50 動的規制件数を読み込み (本日 + 今後)
import json
n_today = len(json.load(open("data/extras/L50_road_restrictions/1257_today.json",
                              encoding="utf-8")).get("results", []))
n_future = len(json.load(open("data/extras/L50_road_restrictions/1258_future.json",
                               encoding="utf-8")).get("results", []))
n_l50 = n_today + n_future

# L72 緊急輸送道路を読み込み (NDJSON 風: 4 階層)
def load_l72_lines(idx):
    p = f"data/extras/L72_emergency_road/.../05_kinkyu_route_{idx}.json"
    with open(p, encoding="utf-8") as f:
        text = f.read()
    return [LineString([(pt["e"], pt["d"]) for pt in seg])
            for seg in json.loads("[" + text + "]") if len(seg) >= 2]

records_l72 = []
for idx in ["01", "02", "03", "04"]:
    for ln in load_l72_lines(idx):
        records_l72.append({"l72_rank": idx, "geometry": ln})
gdf_l72 = gpd.GeoDataFrame(records_l72, crs="EPSG:4326").to_crs("EPSG:6671")

# L72 30m バッファ → L74 と重複延長
gdf_l72_buf = gdf_l72.copy()
gdf_l72_buf["geometry"] = gdf_l72.geometry.buffer(30)
buf_union_l72 = gdf_l72_buf.geometry.union_all()
gdf["overlap_l72_km"] = gdf.geometry.apply(
    lambda g: g.intersection(buf_union_l72).length / 1000)
gdf["on_l72"] = gdf["overlap_l72_km"] > 0
print(f"L74 ∩ L72: {gdf['on_l72'].sum()} 区間 / "
      f"{gdf['overlap_l72_km'].sum():.1f} km")

# 4 カテゴリ (L74 単独 / ∩L73 / ∩L72 / 3 重)
n_only = (~gdf["on_l73"] & ~gdf["on_l72"]).sum()
n_l73 = (gdf["on_l73"] & ~gdf["on_l72"]).sum()
n_l72 = (~gdf["on_l73"] & gdf["on_l72"]).sum()
n_triple = (gdf["on_l73"] & gdf["on_l72"]).sum()
print(f"4 カテゴリ: 単独={n_only} / ∩L73={n_l73} / ∩L72={n_l72} / 3重={n_triple}")

結果 1: 3 階層 件数比較 + 重ね合わせマップ (図 6)

なぜこの図か: H4 (件数 注意>動的>規制) を直接検証するため、 3 階層 件数を棒グラフで並べる。 同時に右パネルで 3 階層を地図に重ねて、 「弱い情報は 広く、 強い規制は狭く」 の物理形を見せる。

図 6 (RQ3): 県の道路情報 3 階層 件数 + 重ね合わせマップ
図 6 (RQ3): 県の道路情報 3 階層 件数 + 重ね合わせマップ

図 6 から読み取れること:

結果 2: L74 ∩ L72 緊急輸送道路 重複マップ (図 7)

なぜこの図か: 県の重要道路 (緊急輸送道路 L72) の沿道に注意区間が 集中するか? を地図で確認する。 L72 (灰背景), L74 単独 (橙), L74 ∩ L72 (緑強調), 3 重指定 (★) の 4 段階色分けで、 「注意 = 主要道路の沿道に多い」 という空間相関 が一目で見える。

図 7 (RQ3): L74 走行注意 ∩ L72 緊急輸送道路
図 7 (RQ3): L74 走行注意 ∩ L72 緊急輸送道路

図 7 から読み取れること:

結果 3: 4 カテゴリ + L72 階層別重複 (図 8)

なぜこの図か: L74 区間を「単独 / ∩L73 / ∩L72 / 3 重」 の 4 カテゴリに クロス分類してパイ図で見せ、 制度的な重なり構造を量化する。 同時に右パネルで L72 階層別 (第 1 次〜補完) の重複分布を見て、 注意区間がどの階層の緊急輸送 道路と重なりやすいかを量化する。

図 8 (RQ3): 制度重なり 4 カテゴリ + L72 階層別重複
図 8 (RQ3): 制度重なり 4 カテゴリ + L72 階層別重複

図 8 から読み取れること:

結果 4: 3 階層 + 4 カテゴリ + 3 重指定 詳細表

3 階層比較サマリ:

階層 件数 性質 規制力
L50 動的規制 (本日 + 今後) 218 短期 (~数日)・工事 + 災害短期 強 (通行止/片側交互/車線規制)
L73 事前通行規制区間 (静的) 164 恒常・雨量閾値超過で発動 強 (発動時 通行止)
L74 走行注意区間 (静的) 381 恒常・落石注意の情報提供 弱 (法的強制なし、 注意喚起のみ)

3 階層 表から読み取れること: 件数規模は L74 (381) > L50 (218) > L73 (164) の順。 規制力は L74 (弱) < L50 (強・短期) < L73 (強・恒常)。 性質も「弱い情報の 広い層 → 強い動的規制 → 強い恒常規制」 という階層構造が確認。

4 カテゴリ クロス:

カテゴリ 区間数 シェア_%
L74 単独 (規制も緊急輸送道路もなし) 72 18.9
L74 ∩ L73 (規制と二重指定, 緊急輸送道路外) 112 29.4
L74 ∩ L72 (緊急輸送道路上, 規制なし) 128 33.6
L74 ∩ L73 ∩ L72 (3 重指定 = 最警戒) 69 18.1

4 カテゴリ 表から読み取れること: L74 単独が圧倒的多数 (18.9%) で、 注意制度は 規制・緊急輸送と独立に運用される箇所が大多数。 一方3 重指定 69 件は最警戒の制度的最重要箇所リストとして 注目すべき。

L72 階層別重複:

緊急輸送道路階層 区間数 重複_km
第1次 20 32.26
第2次 113 240.18
第3次 64 122.17

L72 階層別 表から読み取れること: 第1次 が最多重複。 主要地方道 + 国道に注意区間と緊急輸送道路の二重指定が集中する。

3 重指定 区間 詳細 (上位 15):

seg_id level level_label 市町名 地理クラス len_km l73_naiyo_match l73_type_match overlap_l73_km l72_label overlap_l72_km
L74_0003 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 2.874 冠水, 落石等 jizen 2.406 第2次 1.167
L74_0007 rakuseki_03 03 (低注意) 大竹市 平野・沿岸都市 2.994 落石等 jizen 1.498 第2次 2.994
L74_0008 rakuseki_03 03 (低注意) 大竹市 平野・沿岸都市 2.994 落石等 jizen 2.994 第2次 2.889
L74_0010 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 2.993 落石等 jizen 2.351 第2次 2.907
L74_0014 rakuseki_03 03 (低注意) 廿日市市 平野・沿岸都市 1.927 凍結等, 落石等 jizen, winter 1.927 第2次 0.012
L74_0021 rakuseki_03 03 (低注意) 安芸高田市 中山間山地 2.972 落石等 jizen 0.817 第3次 0.135
L74_0022 rakuseki_03 03 (低注意) 安芸高田市 中山間山地 1.538 落石等 jizen 1.538 第1次 0.088
L74_0028 rakuseki_03 03 (低注意) 安芸高田市 中山間山地 2.993 落石等 jizen 2.289 第3次 2.993
L74_0029 rakuseki_03 03 (低注意) 安芸高田市 中山間山地 1.850 落石等 jizen 1.850 第3次 1.850
L74_0038 rakuseki_03 03 (低注意) 呉市 平野・沿岸都市 1.304 落石等 jizen 0.550 第2次 0.010
L74_0039 rakuseki_03 03 (低注意) 呉市 平野・沿岸都市 2.219 落石等 jizen 1.224 第2次 0.081
L74_0040 rakuseki_03 03 (低注意) 呉市 平野・沿岸都市 3.001 落石等, 越波 jizen 1.813 第2次 0.018
L74_0047 rakuseki_03 03 (低注意) 呉市 平野・沿岸都市 2.807 落石等 jizen 1.894 第3次 0.647
L74_0058 rakuseki_03 03 (低注意) 呉市 平野・沿岸都市 3.048 強風, 越波 jizen 1.738 第2次 3.048
L74_0067 rakuseki_03 03 (低注意) 不明 (代表点が県外/海上) 平野・沿岸都市 2.958 落石等 jizen 0.282 第1次 0.288

3 重指定 表から読み取れること: これら69 区間は「災害時に通行確保すべき (L72) + 災害前に 予防規制 (L73) + 平常時から注意喚起 (L74)」 の4 層 BCP 矛盾。 全件 CSV (L74_triple_segments.csv) で詳細を提供 — 県の地域防災計画に直接 フィードバックできる制度的最重要箇所リストとして利用可能。

仮説検証総合

仮説検証総合 (H1〜H5)

本記事冒頭で立てた 5 仮説の検証結果を以下にまとめる。 すべての仮説の検証根拠は本記事中の図表に明示されており、 再現可能。

仮説 観測値 判定 詳細解説
H1 階層構造: orange (03) ≥ 60% (RQ1) 観測 = 03: 253/381 = 66.4% 強支持 H1 強支持: 走行注意区間 381 のうち低注意 (03, orange) が 253 件 (66.4%)、 高注意 (04, red) が 128 件 (33.6%)。 弱注意が圧倒的多数派で、 強注意は厳選された 少数派という逆ピラミッド型の制度設計を示す。 これは「広く弱い 情報を提供しつつ、 ほんとうに危険な箇所だけ強調する」 という道路情報 提供の品質設計思想を反映 (情報過多回避)。 階層 03 の合計延長 708 kmと階層 04 の 370 kmを比較すると、 区間あたり平均長は 04 のほうが 1.0 倍と 長い (= 強注意は連続した長区間で運用される)。
H2 規制との重複: L74 ∩ L73 ≥ 10 件 (RQ2) 観測 = L74 ∩ L73: 181 件 強支持 H2 強支持: 走行注意区間 (L74) のうち、 事前通行規制区間 (L73) 100m バッファ内にあるのは181 件 (47.5%)、 重複延長は389.1 km。 これは「同じ道路に注意 (弱) + 規制 (強) の二重指定」 がある箇所で、 制度階層の連続性を示す物理的証拠。 規制側の主な内容は 強風, 越波, 冠水, 落石等,冠等で、 これらの箇所は道路管理者が通常時=注意/異常時=規制と運用切替を 設計する最警戒地点。 ただし重複区間は L74 全体の 47.5% に過ぎない (= H3 で見るように L74 は L73 より 広い予防情報層)。
H3 注意のみが多数派: ≥ 80% (RQ2) 観測 = 注意のみ 52.5% 反証 H3 反証: 走行注意区間のうち、 事前通行規制 (L73) と重ならない 「注意のみ」 区間200 件 (52.5%)。 これは注意制度が規制制度より広い範囲の 道路をカバーすることを意味する。 注意 = 「広く弱い予防情報層」、 規制 = 「狭く強い予防制度」 という2 層の制度階層が量的に確認 — 県の予防防災は(1) ドライバーへの注意喚起 (L74 = 広い情報層) → (2) 道路管理者の自動規制 (L73 = 狭い強制層)段階的設計に なっている。 (反証)
H4 件数規模: 注意 (381) > 動的 (218) > 規制 (164) (RQ3) 観測 = L74 381 / L50 218 / L73 164 強支持 H4 強支持: 県の道路情報 3 階層の件数比はL74 注意 381 > L50 動的 218 > L73 静的規制 164。 これは「弱い情報は 広く、 強い規制は狭く」 という逆ピラミッド構造の量的実証。 L74 (注意, 弱, 恒常) が広い情報層 → L50 (動的, 強, 短期) が中間の 運用層 → L73 (静的規制, 強, 恒常) が頂点の予防的安全層。 件数比 = 2.3 : 1.3 : 1.0 (L73 を 1 とした比率)。 これは情報配信の3 階層ピラミッド設計の 具体形であり、 災害時の情報伝達はL74 → L50 → L73の順に強化 されていく構造。
H5 緊急輸送道路との重複 ≥ 20 km (RQ3) 観測 = L74 ∩ L72 重複 394.6 km 強支持 H5 強支持: 走行注意区間 (L74) と緊急輸送道路 (L72, 630 セグ / 2789 km) の 30m バッファ重複は 197 区間 / 394.6 km = L74 総延長 1078 km の 36.6%。 これは「注意区間は主要道路 (緊急輸送道路) の沿道に集中する」 という空間相関の量的証拠。 特に3 重指定 (L74 ∩ L73 ∩ L72) = 69 件は 「災害時に通行確保すべき + 災害前に予防規制 + 平常時から注意喚起」 という4 層 BCP 矛盾の最警戒箇所。 県の地域防災計画では、 これらの 3 重指定箇所こそが「制度的最重要箇所リスト」として 維持管理 + 防災工事の優先順位上位となる。

主要発見の整理

  • RQ1 主発見: 県の走行注意区間は381 区間 / 1078 km の 2 階層構造 (低注意 03 = 253 件 (66.4%) + 高注意 04 = 128 件)。 H1 (強支持)。 中山間 8 市町に 172 件 (45.1%)が集中、 中央区間長 2975 m と「連続した山岳路線への面的指定」 が支配的。 これは「弱い情報の広い層」 という予防情報配信制度の物理形状を 初めて系統的に記述した。
  • RQ2 主発見: L74 ∩ L73 重複は181 件 / 389.1 km (H2 強支持)、 「注意のみ」 区間が 52.5%で多数派 (H3 反証)。 これは「注意 = 広い情報層 ⊃ 規制 = 狭い強制層」という 2 層の制度 階層を量的に実証した。 重複箇所 181 件は「常時=注意 / 異常時= 規制」 の制度切替地点。
  • RQ3 主発見: 県の道路情報 3 階層はL74 (381) > L50 (218) > L73 (164)の逆ピラミッド構造 (H4 強支持)。 L74 ∩ L72 緊急輸送道路 重複は197 区間 / 394.6 km (H5 強支持)、 3 重指定 (L74∩L73∩L72) 69 件が「制度的最警戒箇所」 として量的同定された。 これらは県の地域防災計画 BCP の最優先課題リストとして直接利用可能。

本記事の独自貢献

  1. 「予防情報配信制度」 の概念定量化: 走行注意区間 381 区間 を 注意レベル × 区間長 × 地理クラス × 市町の 4 軸で初めて系統的に集計。 県の予防情報運用が「rakuseki_03/04 の 2 階層 + 連続山岳路線への面的指定」 という制度に整理されていることを実証。
  2. 「注意 vs 規制」 の制度階層実証: L74 (注意) と L73 (規制) の 100m バッファ重複で、 「注意 = 広い情報層 ⊃ 規制 = 狭い強制層」と いう 2 層の制度階層を量的に支持。 注意のみ 52.5% + 重複 47.5% の構造で、 注意制度が規制制度より広い予防 情報をカバーする設計を確認。
  3. 「県の道路情報 3 階層」 概念フレームの提案: L50 動的 + L73 静的規制 + L74 静的注意の 3 階層を統合して分析する初の研究。 件数規模 の逆ピラミッド構造(注意 > 動的 > 規制) を量的実証し、 災害時の情報伝達 は「注意 → 規制 → 動的規制」の順に強化される構造を整理。
  4. 「3 重指定箇所」 リストの作成: L74 (注意) ∩ L73 (規制) ∩ L72 (緊急輸送 道路) の3 重交差を空間判定で69 件同定 (CSV 出力)。 これらは「災害時に通行確保すべき + 災害前に予防規制 + 平常時から注意喚起」 の 4 層 BCP 矛盾を持つ最警戒箇所であり、 県の地域防災計画 BCP の最優先 課題リストとして直接利用可能。
  5. L50 + L72 + L73 との横断連携 (4 dataset 統合): 走行注意 (L74, 1 dataset) + 動的規制 (L50, 既扱) + 事前規制 (L73, 既扱) + 緊急輸送道路 (L72, 既扱) の 4 dataset を sjoin で組合わせ、 県の道路情報配信制度ネットワークを 初めて統合的に定量化。
  6. NDJSON 風形式の解読パターン例示: L72 と同様の「[配列] が「,改行」 区切りで複数並ぶ」 形式を "[" + text + "]" ラップで解読する 手法を再利用。 公開データの非標準形式を実装で吸収する手法を例示。

本記事の限界

発展課題

発展課題 — 結果 X → 新仮説 Y → 課題 Z 形式

発展課題 1 (RQ1 拡張): 注意レベル基準の数値化

発展課題 2 (RQ2 拡張): L73 ∩ L74 二重指定の運用詳細解析

発展課題 3 (RQ2 拡張): 注意区間の沿道地形・地質との相関

発展課題 4 (RQ3 拡張): 3 重指定 69 件の防災工事優先順位

発展課題 5 (RQ3 拡張): 動的 (L50) との時間的重なり解析

発展課題 6 (展望): 地域住民への注意区間情報配信

発展課題 7 (展望): 注意 → 規制 制度移行のリードタイム解析