Lesson 54

宅地造成等工事規制区域 単独 3 研究例分析 — 盛土規制法 12 条 1 項の地理的射程を 21 ファイルから読み解く

L54盛土規制法宅地造成等工事規制区域RQ×3Format B12条1項二重リスクL52連携L53連携制度間ギャップ
所要 40 分 / 想定レベル: 中級+ / データ: DoBoX dataset 1427 (Shapefile 120 polygon + XLSX 規制資料) + L52/L10/L11 連携

データ取得手順

このスクリプトは初回実行時にデータを自動取得します(DoBoX からの直接ダウンロード)。

IDデータセット名
#333dataset #333
#444dataset #444
#888都市計画区域情報_区域データ_安芸高田市_行政区域
#1427宅地造成等工事規制区域
#1429許可盛土等(法第12条第1項・30条第1項)
#1430届出盛土等(法第21条第1項・40条第1項)

実行コマンド:

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

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

学習目標と問い

本記事は DoBoX のシリーズ「宅地造成等工事規制区域」 1 件 (dataset_id = 1427) を 単独で取り上げ、 広島県内の宅造規制区域 380 polygon (県知事指定 120 + 市町長指定 260) / 18 市町 / union 面積 2075 km² (24.5% of 県土) を 3 つの独立した研究角度 (RQ1 / RQ2 / RQ3) で並列に分析する。 本データは盛土規制法 (2023-05-26 施行) 第 12 条第 1 項に基づく区域指定であり、 旧「宅地造成等規制法」 (1961-2023) からの指定継承である。

本データは DoBoX で21 ファイル構成: 県知事指定の県全域版 1 ファイル (51124, 2023-04-27 版) + 各市町長指定の市町別 20 ファイル (51125〜51144, 2023-09 版)。 盛土規制法 12 条 1 項は都道府県知事が指定するが、 広島市・呉市・尾道市・福山市・東広島市等の政令指定都市/中核市は 法令により独自に指定権限を持つため別ファイルで配信されている。 本記事は 21 ファイルすべてを統合して扱う。

本記事の独自ポイントは、L52 (許可盛土 152 件) / L53 (届出盛土 284 件) と並列で読むことで、 盛土規制法の「区域 → 工事監督」 という 2 階建て構造を初めてデータから可視化する点。 区域指定 (本記事 L54) は地理範囲を法的に固定し、 許可制 (L52) と届出制 (L53) はその区域内で個別工事を監督する。 区域なしには工事監督が成立しないため、L54 は L52・L53 の地理的根拠である。

独自用語の定義

研究の問い (3 RQ)

仮説 H1〜H5

  1. H1 (都市集中, RQ1): Top 5 市町で全県指定面積の 50% 以上を占める。 山間部市町は指定なしか小面積。
  2. H2 (区域内立地率高, RQ2): L52 許可盛土 152 件のうち、本規制区域内立地は 70% 以上。 区域外立地は特定盛土区域 (法 30 条) 側の許可で少数派。
  3. H3 (区域内密度の市町偏在, RQ2): 本区域内の許可盛土密度 (件/km²) は 市町別に 2 桁以上の幅で偏在 (都市部高 / 山間市町低)。
  4. H4 (警戒区域との部分重複, RQ3): 規制 ∩ 警戒の重複面積比は 20-40%。 規制は市街地中心を、警戒は急傾斜・渓流を捉えるため空間目的が異なる。
  5. H5 (二重リスクエリアの市町偏在, RQ3): 二重リスク (規制 ∩ 警戒) の市町別ランキングは 「規制面積トップ × 警戒面積トップ」 のクロス積。広島市・呉市・尾道市が上位 3。

到達点

本記事を読み終えた学習者は次の 3 点を体感できる:

  1. 1 つの「区域 Shapefile」 (120 polygon) から、 盛土規制法の地理的射程 (36.2%) を読み取り、 L52 (許可) / L53 (届出) との地理的依存関係を可視化する方法を習得する。
  2. 区域内盛土密度という独自指標で、件数の絶対値ではなく 面積正規化した強度で市町を比較する眼を獲得する。
  3. 規制 × 警戒の 4 区分カバレッジ分析で、制度間ギャップ (警戒のみ 98 km²) という 行政設計上の重要課題を定量化する手法を体感する。

使用データ

DoBoX のシリーズ「宅地造成等工事規制区域」 1 件のみを単独で扱う。 リソースは Shapefile 21 件 (県知事 1 + 市町長 20) + XLSX 1 件の計 22 ファイル構造:

項目
dataset_id1427
名称宅地造成等工事規制区域
組織広島県土木建築局 都市環境整備課
リソース 1 (県知事)51124 — 県全域 Shapefile (120 polygon, 24 区域整理番, 2.3 MB, 2023-04-27 版)
リソース 2-21 (市町長)51125〜51144 — 市町別 Shapefile 計 20 ファイル (260 polygon, 2023-09 版)
リソース 22 (規制資料)51145 — 盛土規制法関係資料 XLSX (規制内容 + 手続き先, 23.1 KB)
根拠法宅地造成及び特定盛土等規制法 第 12 条第 1 項 (2023-05-26 施行)
旧法宅地造成等規制法 (1961-2023)
CRSEPSG:2445 (JGD2000 平面直角第 III 系) → 解析時 EPSG:6671 へ変換
指定日2023-04-27 (新法施行直前 = 旧法指定の継承)
ライセンスクリエイティブ・コモンズ表示 4.0
取得日2026-05-09

データの構造

CRS と単位の取扱

本記事は dataset 1427 を単独で扱う Format B 記事。 L52 (dataset 1429 = 許可盛土) との比較は本区域指定が L52 許可立地の前提であるため RQ2 で使用する。土砂災害警戒区域 (sediment_shp) は L10/L11 で扱った既存データを RQ3 で空間結合に利用するが、警戒区域そのものの分析は別レッスンに委ねる。

ダウンロード

本レッスンの再現に必要な全データ・中間 CSV・図 PNG・スクリプトを以下から直接 DL できる:

生データ (DoBoX 直リンク)

本記事の中間 CSV (再現用)

図 (PNG 9 枚)

再現スクリプト

個別取得 (PowerShell):

cd "2026 DoBoX 教材"
iwr "https://hiroshima-dobox.jp/resource_download/51124" -OutFile "data/extras/L54_residential_filling_zone/340006_residential_land_construction_regulation_area_shp_20230427.zip"
iwr "https://hiroshima-dobox.jp/resource_download/51145" -OutFile "data/extras/L54_residential_filling_zone/340006_earth_filling_regulation_related_documents.xlsx"
py -X utf8 lessons\L54_residential_filling_zone.py

注: RQ2 (L52 比較) には L52 の処理済 CSV (lessons/assets/L52_permits_processed.csv) が必要。 未生成の場合、本スクリプトは RQ2 部分を「データ無し」 表示にしてフォールバック実行する。

【RQ1】 地理範囲と市町指定状況の研究 — 21 ファイル・約 2,075 km² (県の 24%) の沿岸都市偏重

狙い (RQ1)

宅造規制区域 (18 市町指定) は広島県の宅造工事監督の地理的射程を法的に固定する。 本 RQ1 では (1) 県全体の指定面積、(2) 市町別指定面積ランキング、 (3) 地形タイプ別構成、(4) polygon 個別の規模分布の4 軸で構造を読む。 これは「県は何を、どの面積で、どんな地形タイプで、どの市町で監督対象としているか」 を 全方位で記述する基礎研究。

手法 (21 ファイル読込 → 統合 → CRS 変換 → admin sjoin → 集計)

入出力 Before/After 具体例 (1 ファイル追跡)

市町別 Shapefile 51140 (= 345458_..., 大崎上島町相当) の処理例:

段階対象geometryCRSpolygon数
RAW (zip)市町別 zip 1 個Shapefile 集合EPSG:2445
1. unzip + read_fileGeoDataFramePolygon × NEPSG:2445N
2. to_crs(6671)GeoDataFrameEPSG:6671 へ再投影EPSG:6671N
3. 指定主体列付与GeoDataFrame+ 指定主体='市町長'EPSG:6671N
4. concat (20 ファイル)全市町長 GDFPolygon × 260EPSG:6671260
5. concat (県知事 + 市町長)統合 zonesPolygon × 380EPSG:6671380
6. unary_union重複除去後1 MultiPolygonEPSG:6671面積 2075 km²

実装コード (Shapefile 読込 + dissolve + admin sjoin)

L54_residential_filling_zone.py 行 1650–1757

 1
 2
 3
 4
 5
 6
 7
 8
 9
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
# 21 ファイル統合: 県知事 + 20 市町長指定 Shapefile
import geopandas as gpd, pandas as pd, zipfile
from pathlib import Path
from shapely.ops import unary_union

# 1. 県知事指定 (51124, 県全域版) を読込
zone_pref = gpd.read_file(
    "data/extras/L54_residential_filling_zone/shp/"
    "340006_residential_land_construction_regulation_area_shp_20230427.shp"
).to_crs("EPSG:6671")
pref_named = zone_pref[zone_pref["区域整理番"].notna()].copy()
pref_named["指定主体"] = "県知事"

# 2. 20 市町長指定 Shapefile を順次読込 (51125〜51144)
city_dir = Path("data/extras/L54_residential_filling_zone/all_cities/")
city_polys = []
for zip_path in sorted(city_dir.glob("*.zip")):
    code5 = zip_path.name[:5]  # 例: 342033 → "34203" (市町コード)
    extract = city_dir / f"tmp_{code5}"
    extract.mkdir(exist_ok=True)
    if not any(extract.glob("*.shp")):
        with zipfile.ZipFile(zip_path) as zf:
            zf.extractall(extract)
    g = gpd.read_file(next(extract.glob("*.shp"))).to_crs("EPSG:6671")
    g["指定主体"] = "市町長"
    g["指定主体_code"] = code5
    city_polys.append(g)

city_named = pd.concat(city_polys, ignore_index=True)

# 3. 統合 (縦結合)
common_cols = ["指定主体", "geometry"]
zones = gpd.GeoDataFrame(
    pd.concat([pref_named[common_cols], city_named[common_cols]], ignore_index=True),
    crs="EPSG:6671")
zones["poly_area_km2"] = zones.geometry.area / 1e6
zones["poly_id"] = range(len(zones))

# 4. 各 polygon の代表点で行政区域と sjoin → 市町名解決
zones["rep_pt"] = zones.geometry.representative_point()
zone_pts = gpd.GeoDataFrame(zones[["poly_id"]], geometry=zones["rep_pt"], crs="EPSG:6671")
join = gpd.sjoin(zone_pts, admin_diss[["CITY_CD", "geometry"]],
                 how="left", predicate="within").drop_duplicates("poly_id")
zones["市町名"] = join.set_index("poly_id")["CITY_CD"].reindex(zones["poly_id"]) \
                       .map(CITY_NAME).fillna("不明").values

# 5. 市町別 dissolve + union 面積
zone_dissolved = zones.dissolve(by="市町名", as_index=False)
zone_dissolved["zone_area_km2"] = zone_dissolved.geometry.area / 1e6
zone_pref_union = unary_union(list(zone_dissolved.geometry))
print(f"統合 polygon: {len(zones)}, union 面積: {zone_pref_union.area/1e6:.1f} km²")

図 1: 全規制区域マップ (指定主体別) + 市町別指定面積コロプレス (2 panel)

なぜこの図か: 学習者がまず「規制区域はどこにあるか」 を一目で把握するため。 左の指定主体別色分けで、県知事指定 (赤) と市町長指定 (青) の制度的色彩を視覚化。 右のコロプレスで市町別指定面積の濃淡を見る。 両方を並べることで「指定権限主体の違い」 と「量の偏り」 を別軸で読む基本訓練ができる。

図 1 (RQ1): 全規制区域マップ (指定主体別) + 市町別指定面積コロプレス
図 1 (RQ1): 全規制区域マップ (指定主体別) + 市町別指定面積コロプレス

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

図 2: polygon 規模分布 (log) + 市町別指定面積ランキング (Top 15)

なぜこの図か: 統合 {len(zones)} polygon は市町・指定主体別に大きさが大きく異なる。 左のヒストグラム (log) で polygon の規模分布、右の市町ランキングで 県全体での偏在度を読む。両方を並べることで「polygon 数の多さ ≠ 面積の多さ」 を体感できる。

図 2 (RQ1): polygon 規模分布 (log) + 市町別指定面積ランキング (Top 15)
図 2 (RQ1): polygon 規模分布 (log) + 市町別指定面積ランキング (Top 15)

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

図 3: 地形タイプ別 指定面積構成 (パイ) + 県総面積シェア比較 (棒)

なぜこの図か: 規制区域指定の地理的偏りを 2 つのスケールで見る。 左パイは「規制区域の中での 3 タイプの内訳」、右棒は「県全体に対する規制区域の量」。 両方を並べることで、規制区域の質 (どこに偏るか) と量 (県のうちどれだけか) を分けて理解できる。

図 3 (RQ1): 地形タイプ別 指定面積構成 + 県シェア比較
図 3 (RQ1): 地形タイプ別 指定面積構成 + 県シェア比較

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

表: 全体サマリ (規制区域 + L52 比較 + 警戒区域)

指標
総 polygon 数380 polygon (県知事 120 + 市町長 260, 市町別 dissolve 後 18 市町)
対象市町数18 市町
指定面積 (合算)3066.59 km² (県+市町長別々の合算, 重複あり)
指定面積 (union)2075.40 km² (重複除去後の真の指定面積, 県 8479 km² の 24.48%)
polygon 規模 中央値 / 最大0.533 km² / 515.15 km²
Top 1 市町三原市 (588.7 km²)
Top 5 シェア65.8%
地形タイプ別 沿岸都市1502 km² (72%)
L52 許可盛土 総件数152
L52 区域内立地131/152 件 (86.2%)
L52 区域外立地21 件 (13.8%)
規制区域 ∩ 警戒区域60.93 km² (規制内 2.9% / 警戒内 38.3%)
二重リスク Top 3 シェア45% (東広島市, 尾道市, 三原市)
警戒のみ (規制外)98 km² (全警戒の 61.7%)

この表から読み取れること: 380 polygon / 18 市町 / union 面積 2075 km² / 県シェア 24.5% という基礎数値、L52 区域内立地 86%、二重リスク 61 km² 等の横断指標が一覧で確認できる。RQ1〜RQ3 の核心が 13 行に集約された統合サマリ。

表: 市町別規制区域一覧 (面積順)

順位市町名地形タイプ面積_km2指定面積シェア_%県総面積シェア_%県知事n市町長n
1東広島市A_沿岸都市517.124.96.1008
2三原市A_沿岸都市294.314.23.4799
3尾道市A_沿岸都市211.410.22.49020
4廿日市市A_沿岸都市196.19.452.3188
5庄原市B_内陸都市188.69.082.22072
6三次市B_内陸都市141.56.821.672223
7竹原市A_沿岸都市118.25.691.3945
8江田島市A_沿岸都市65.83.170.78066
9府中市B_内陸都市58.02.790.68006
10不明D_その他57.62.770.6803441
11安芸高田市B_内陸都市53.12.560.630020
12安芸太田町C_山間/島嶼48.12.320.5701920
13熊野町A_沿岸都市33.61.620.40011
14世羅町C_山間/島嶼26.81.290.3201415
15大竹市A_沿岸都市25.61.230.30003
16坂町A_沿岸都市15.70.7600.18011
17海田町A_沿岸都市13.80.6600.16011
18府中町A_沿岸都市10.40.5000.12011

この表から読み取れること: 各市町の地形タイプ・面積・指定主体構成を一覧で確認できる。Top 5 はすべて沿岸都市で、上位 5 で県の 66% を占める。下位の小区域 (1 km² 未満) は山間集落の小規模市街地で、規制区域指定のカバレッジの広さを担保している。

表: 地形タイプ別集計 (3 タイプ)

地形タイプ市町数指定面積_km2シェア_%
A 沿岸都市111,50272.4
B 内陸都市4441.221.3
C 山間/島嶼274.93.60
D その他157.62.80

この表から読み取れること: 沿岸都市が 72% を占め、内陸 21% / 山間・島嶼 4% と続く。市町数で見ると沿岸都市は少ないが面積が大きく、山間・島嶼は市町数が多いが面積は小さい = 都市規模と市町数の逆対応関係が現れる。

【RQ2】 許可盛土発生密度との関係 — L52 152 件の区域内立地検証

狙い (RQ2)

宅造規制区域は L52 許可盛土の地理的根拠。 区域指定が無ければ 12 条 1 項の許可義務は発動しないため、 本来「L52 152 件は本区域内に立地する」 のが制度設計上の前提である。 本 RQ2 では (1) 区域内立地率の検証、(2) 区域別の盛土密度 (件/km²)、 (3) 区域立地の地理特性 (= 特定盛土区域 30 条側) を読み解く。

「件数」 は絶対値だが、密度 (件/km²) は面積で正規化された強度指標。 都市部の小区域に多くの許可盛土が集中するか、山間市町の大区域に薄く分散するか — 密度ランキングはそれを直接比較できる本研究独自の指標。

手法 (within 判定 + 区域別 sjoin + 密度計算)

入力: L52 152 点 + 規制区域 union (2075 km²)。
出力: 各 L52 点に in_zone フラグ (True/False)、市町別に許可盛土件数・密度。
限界: within 判定は polygon 境界線上の点を「外」 と判定する場合がある (誤差は数 m レベルで実用上問題ない)。本データは座標精度 ~10 m なので影響は無視可能。

実装コード (within 判定 + 区域別 sjoin + 密度計算)

L54_residential_filling_zone.py 行 1836–1897

 1
 2
 3
 4
 5
 6
 7
 8
 9
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
# RQ2: 規制区域 × L52 許可盛土の空間解析
from shapely.ops import unary_union
import pandas as pd, geopandas as gpd

# 1. L52 既処理 CSV から GeoDataFrame
df_l52 = pd.read_csv("lessons/assets/L52_permits_processed.csv", encoding="utf-8-sig")
g52 = gpd.GeoDataFrame(
    df_l52,
    geometry=gpd.points_from_xy(df_l52["lon"], df_l52["lat"]),
    crs="EPSG:4326").to_crs("EPSG:6671")

# 2. 規制区域 (県知事 + 市町長指定 全 polygon) を 1 つに統合し、各 L52 点が内/外を判定
zone_union = unary_union(list(zone_dissolved.geometry))
g52["in_zone"] = g52.geometry.within(zone_union)

n_in = g52["in_zone"].sum()
print(f"L52 区域内立地: {n_in}/{len(g52)} = {n_in/len(g52):.1%}")

# 3. 区域別盛土件数 (sjoin)
g52_zone = gpd.sjoin(g52, zone_dissolved[["zone_id", "geometry"]],
                     how="left", predicate="within")
zone_count = g52_zone.groupby("zone_id").size().reset_index(name="許可盛土件数")

# 4. 密度 = 件数 / 区域面積 (km²)
zone_density = zone_dissolved[["zone_id", "市町名", "zone_area_km2"]].merge(
    zone_count, on="zone_id", how="left").fillna(0)
zone_density["密度_件_km2"] = zone_density["許可盛土件数"] / zone_density["zone_area_km2"]
print(zone_density.sort_values("密度_件_km2", ascending=False).head(5))

図 4: 規制区域 × L52 許可盛土オーバーレイ + 規模分布比較

なぜこの図か: 「区域指定 = 許可盛土集中」 仮説 (H2) を地図上で直接検証する。 左で規制区域 (緑) と許可盛土 (区域内=青○ / 区域外=紫△) を重ね、 右で区域内/外の盛土面積分布を log で並列比較する。 規模に差があれば「区域指定の有無で許可される盛土の質も変わる」 ことを示す。

図 4 (RQ2): 規制区域 × L52 許可盛土オーバーレイ + 区域内/外規模比較
図 4 (RQ2): 規制区域 × L52 許可盛土オーバーレイ + 区域内/外規模比較

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

図 5: 区域別 許可盛土密度ランキング + 区域面積 × 件数 散布

なぜこの図か: 「件数」 は絶対値だが「密度 (件/km²)」 は面積正規化指標。 小区域に少数立地でも密度は高くなり、大区域に多数立地でも密度は低くなる。 ランキングは件数だけでは見えない区域の盛土圧を可視化する。 右の散布図 (面積 × 件数) で、密度 = 傾きの解釈もできる。

図 5 (RQ2): 区域別 許可盛土密度ランキング + 区域面積 × 件数 散布
図 5 (RQ2): 区域別 許可盛土密度ランキング + 区域面積 × 件数 散布

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

表: 区域別 許可盛土密度

順位市町名区域面積_km2L52許可盛土件数密度_件km2
1府中町10.4111.06
2世羅町26.840.149
3海田町13.820.145
4尾道市211.4220.104
5熊野町33.630.089
6竹原市118.2100.085
7大竹市25.620.078
8不明57.640.069
9廿日市市196.1130.066
10三次市141.590.064
11東広島市517.1330.064
12安芸高田市53.130.056
13府中市58.020.034
14三原市294.380.027
15安芸太田町48.110.021
16庄原市188.630.016
17江田島市65.810.015
18坂町15.700.000

この表から読み取れること: 密度トップは 府中町 = 1.06 件/km²。区域面積が小さく盛土件数が多い区域が密度上位を占める = 都市部の集中開発エリアの特徴。

表: 区域内/外 L52 規模比較

指標区域内区域外差 (区域内 - 区域外)
件数 (件)131.021.0110.0
高さ 中央値 (m)2.074.55-2.48
面積 中央値 (m²)929.03,825-2,896
盛土量 中央値 (m³)611.05,650-5,038
面積 最大 (m²)9,95441,501-31,546

この表から読み取れること: 区域内盛土と区域外盛土の規模中央値の差で、「区域指定の有無で許可される盛土の質が変わるか」 を直接確認できる。件数差 110 件 (区域内 - 区域外) は区域指定の地理的偏在の現れ。

【RQ3】 土砂災害警戒区域との重ね合わせ — 二重リスクと制度間ギャップ

狙い (RQ3)

宅造規制区域 (= 行政が宅造工事を許可制で監督) と 土砂災害警戒区域 (= 自然災害想定エリア) は異なる行政目的で指定される 2 つの polygon 集合。本来は「規制 ∩ 警戒 = 二重防御」の領域があるはずだが、 指定タイミングの差や空間目的の違いで、想定外の重複構造を持つ可能性がある。

本 RQ3 では (1) 全県の規制 ∩ 警戒重複面積、(2) 市町別二重リスクランキング、 (3) 4 区分カバレッジ (規制∩警戒 / 規制のみ / 警戒のみ / どちらも該当外) を読み解く。 特に「警戒のみ (= 規制区域外の警戒区域)」 は制度間ギャップとして重要。

手法 (geometry intersection + 4 区分集計)

入力: 規制区域 polygon (union 2075 km²) + 急傾斜 30K + 土石流 13K polygon。
出力: 全県重複面積、区域別二重リスク、4 区分面積。
限界: 警戒区域の面積は dissolve 前後で変わらない (= 同種類の警戒同士の重複は無視できる)。 ただし急傾斜 ∩ 土石流 の重複 (異種警戒の重複) は本研究では合計に含めて扱う。

実装コード (geometry intersection + 4 区分集計)

L54_residential_filling_zone.py 行 1978–2045

 1
 2
 3
 4
 5
 6
 7
 8
 9
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
# RQ3: 規制区域 × 警戒区域の重ね合わせ
from shapely.ops import unary_union
import geopandas as gpd

# 1. 警戒区域 (急傾斜 + 土石流) を 1 つに union
warn_all_geom = unary_union(list(warn_kyukei.geometry) + list(warn_doseki.geometry))

# 2. 規制区域も union
zone_pref_geom = unary_union(list(zone_dissolved.geometry))

# 3. intersection で重複面積
overlap_geom = zone_pref_geom.intersection(warn_all_geom)
overlap_km2 = overlap_geom.area / 1e6

# 4. 4 区分集計
zone_only_geom = zone_pref_geom.difference(warn_all_geom)
warn_only_geom = warn_all_geom.difference(zone_pref_geom)
zone_only_km2 = zone_only_geom.area / 1e6
warn_only_km2 = warn_only_geom.area / 1e6
print(f"規制 ∩ 警戒 = {overlap_km2:.1f} km²")
print(f"規制のみ    = {zone_only_km2:.1f} km²")
print(f"警戒のみ    = {warn_only_km2:.1f} km² ← 制度間ギャップ")

# 5. 区域別二重リスク
double_risk = []
for _, r in zone_dissolved.iterrows():
    inter = r.geometry.intersection(warn_all_geom)
    double_risk.append({
        "市町名": r["市町名"],
        "二重リスク_km2": inter.area / 1e6 if not inter.is_empty else 0,
    })

図 6: 規制区域 × 警戒区域 重ね合わせ全県マップ

なぜこの図か: 全県で規制区域 (緑) と警戒区域 (赤=急傾斜・橙=土石流) が どう重なるかを 1 図で俯瞰する。レイヤ順は warn → zone で、 警戒区域の上に規制区域が透過で乗る。 重なる場所は 2 色が混ざって見え、二重リスクエリアが視覚的に確認できる。

図 6 (RQ3): 規制区域 × 警戒区域 重ね合わせ全県マップ
図 6 (RQ3): 規制区域 × 警戒区域 重ね合わせ全県マップ

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

図 7: 市町別 二重リスク面積 choropleth + ランキング

なぜこの図か: 二重リスクを市町単位で正規化したランキングと地図。 左コロプレスで地理分布、右ランキングで絶対値+区域内比率を読む。 これにより「どの市町が最も二重リスクを抱えるか」 と「区域面積に占める警戒比率」 を同時に把握できる。

図 7 (RQ3): 市町別 二重リスク面積 choropleth + ランキング
図 7 (RQ3): 市町別 二重リスク面積 choropleth + ランキング

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

図 8: 県全土 4 区分カバレッジ — 規制 / 警戒の組合せパターン

なぜこの図か: 県全土 (8479 km²) を「規制と警戒の有無」 で 4 区分し、 それぞれの面積を可視化することで制度間カバレッジを診断する。 特に「警戒のみ」の面積は規制が及ばない災害リスクエリア = 制度間ギャップ。 左パイで構成比、右棒で絶対面積を見る。

図 8 (RQ3): 県全土 4 区分カバレッジ (規制 / 警戒の組合せパターン)
図 8 (RQ3): 県全土 4 区分カバレッジ (規制 / 警戒の組合せパターン)

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

表: 区域別 二重リスクランキング (Top 15)

順位市町名区域面積_km2二重リスク_km2区域内警戒区域比率_%
1東広島市517.110.32.00
2尾道市211.48.804.20
3三原市294.38.212.80
4庄原市188.65.693.00
5廿日市市196.14.982.50
6竹原市118.24.864.10
7不明57.64.347.50
8三次市141.52.912.10
9府中市58.02.694.60
10江田島市65.82.123.20
11安芸高田市53.11.583.00
12安芸太田町48.11.132.40
13大竹市25.60.8673.40
14世羅町26.80.6442.40
15海田町13.80.5744.20

この表から読み取れること: 二重リスク面積トップは 東広島市 (10.3 km², 区域内警戒比率 2%)。区域面積が大きいだけでなく、区域内に占める警戒区域の比率も高い = 地形リスクと宅地需要が重なる宿命的な都市構造

表: 4 区分カバレッジ (県 8479 km²)

区分面積_km2県シェア_%意味
1. 規制 ∩ 警戒 (二重リスク)60.90.720宅地工事に許可必要 + 自然災害想定 = 二重防御エリア
2. 規制のみ (警戒区域外)2,01423.8宅地工事の許可制のみ。市街地中心の平地等
3. 警戒のみ (規制区域外)98.31.16災害想定のみ。山間・郊外で宅造規制なし → 制度間ギャップ
4. どちらも該当外6,30674.4両制度の対象外。森林・農地・水域など

この表から読み取れること: 4 区分のうち「警戒のみ」が 98 km² (1.2%) と最大級で、これが制度間ギャップ。宅造規制が及ばない災害想定エリアで、山間・郊外集落周辺に分布する。該当外が県土の大半を占めるが、これは森林・農地・水域で住民密度が低く宅地監督対象外という当然の結果。

表: 警戒のみエリア 上位市町 (制度間ギャップ)

順位市町名警戒のみ_km2
1福山市14.2
2広島市安佐北区11.7
3呉市10.7
4庄原市9.08
5三次市8.20
6安芸太田町5.64
7広島市佐伯区5.59
8安芸高田市5.24
9広島市安佐南区4.24
10広島市安芸区3.87
11廿日市市2.26
12府中市2.24
13世羅町1.90
14広島市東区1.66
15広島市西区1.61

この表から読み取れること: 警戒のみエリアの上位市町は 福山市 (14.2 km²) を筆頭に山間市町が多く名を連ねる → 山間市町は警戒区域の絶対面積が大きいが宅造規制区域が小さいため、制度間ギャップが集中して発生。これらの市町は L53 届出制度 (40 条 = 特定盛土区域) で間接的に盛土工事を監督する設計だが、規制区域 (12 条) のような厳格な許可制ではない。

表: polygon サンプル (Top 10 大 polygon)

順位指定主体団体コード市町名polygon面積_km2
1市町長342122東広島市515.2
2県知事340006三原市278.2
3市町長342041三原市278.2
4市町長342131廿日市市161.2
5県知事340006廿日市市161.2
6県知事340006三次市127.5
7市町長342092三次市127.5
8県知事340006竹原市116.8
9市町長342033竹原市116.8
10市町長342050尾道市103.8

この表から読み取れること: 個別 polygon の最大は 東広島市 の 515.2 km²。1 区域内に複数大規模 polygon を含む場合、その区域は連続した広い市街地を持つ大都市と推察される。

仮説検証総合

本記事の 5 仮説と観測結果の照合:

仮説予想観測判定
H1 (都市集中, 上位 5 シェア ≥ 50%, RQ1)Top 5 市町で全県の 50% 以上Top 5 = 三原市, 東広島市, 廿日市市, 三次市, 竹原市, シェア 65.8%支持
H2 (区域内立地率 ≥ 70%, RQ2)L52 152 件のうち区域内立地が 70% 以上L52 区域内 131/152 件 = 86.2%支持
H3 (区域内密度の市町偏在 ≥ 2 桁, RQ2)区域別 件/km² が 2 桁以上の幅で偏在密度 max 1.06 / min(>0) 0.0150 = 70 倍部分支持
H4 (規制 ∩ 警戒 = 20-40%, RQ3)規制区域内に占める警戒区域の割合が 20-40%規制 ∩ 警戒 = 60.9 km², 規制内 2.9%観測 3% (予想外)
H5 (二重リスク Top 3 集中, RQ3)上位 3 で二重リスク全体の半数以上Top 3 = 東広島市, 尾道市, 三原市, シェア 44.8%部分支持 (45%)

3 RQ × 3 結論

3 制度モデル — 規制区域 (L54) / 許可制 (L52) / 届出制 (L53) の関係表

側面規制区域 (L54)許可制 (L52)届出制 (L53)
根拠条文法 12 条 1 項 (本記事)法 12 条 1 項 / 30 条 1 項法 21 条 1 項 / 40 条 1 項
対象地理範囲 (区域指定 = ポリゴン)個別工事 (規模超 = 許可必要)個別工事 (規模以下 = 届出必要)
本データ単位380 polygon (18 市町, union 2075 km²)152 件 (個別工事)284 件 (個別工事)
全県カバレッジunion 2075 km² (24.5% of 県)L52 区域内立地 86%区域内 + 特定盛土区域 (40 条)
指定の意味区域内全工事に許可/届出義務発動の前提条件事前審査 + 許可条件 (重い手続)事前通知のみ (軽い手続)
L54 との関係L52 のうち 86% が L54 区域内L53 もすべて L54 区域内 (区域指定が前提)

この表から読み取れること: 盛土規制法の3 階層構造が見える: (1) 区域 (L54) = 地理範囲を法的に固定 → (2) 区域内で許可閾値超 = 12/30 条許可 (L52) → (3) 区域内で許可閾値以下 = 21/40 条届出 (L53)。L54 (区域) は L52 / L53 の地理的前提であり、L52 / L53 は L54 の具体実装。3 つを並列で読むことで、盛土規制法の制度設計が初めて立体的に理解できる。

発展課題

結果 X → 新仮説 Y → 課題 Z (3 RQ × 1 課題以上)

発展課題 1 (RQ1 由来): 区域指定の都市計画整合性検証

発展課題 2 (RQ2 由来): 盛土密度と人口密度・地価の連関

発展課題 3 (RQ3 由来): 警戒のみエリアの宅地造成リスク定量化