Lesson 27

L27 非線引き用途地域 × 非線引き用途白地 PAIR 統合分析 — 広島県 13 非線引き市町の「ゆるい都市制御」構造

都市計画非線引き用途地域用途白地GISgeopandasGeoJSON互補ペア統合13市町KUIKI_CD
所要 40-60 分 / 想定レベル: 中級 (geopandas, dissolve, choropleth, ペア合体) / データ: DoBoX 区域データ_非線引き用途地域 14 件 + 区域データ_非線引き用途白地 14 件 = 計 28 dataset_id (= 13 市町×2種 + 県全域×2)

データ取得手順

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

IDデータセット名
#111dataset #111
#222dataset #222
#444dataset #444
#666dataset #666
#802都市計画区域情報_区域データ_呉市_非線引き用途地域
#803都市計画区域情報_区域データ_呉市_非線引き用途白地
#809都市計画区域情報_区域データ_竹原市_非線引き用途地域
#810都市計画区域情報_区域データ_竹原市_非線引き用途白地
#819都市計画区域情報_区域データ_三原市_非線引き用途地域
#820都市計画区域情報_区域データ_三原市_非線引き用途白地
#829都市計画区域情報_区域データ_尾道市_非線引き用途地域
#830都市計画区域情報_区域データ_尾道市_非線引き用途白地
#845都市計画区域情報_区域データ_府中市_非線引き用途地域
#846都市計画区域情報_区域データ_府中市_非線引き用途白地
#853都市計画区域情報_区域データ_三次市_非線引き用途地域
#854都市計画区域情報_区域データ_三次市_非線引き用途白地
#859都市計画区域情報_区域データ_庄原市_非線引き用途地域
#860都市計画区域情報_区域データ_庄原市_非線引き用途白地
#873都市計画区域情報_区域データ_東広島市_非線引き用途地域
#874都市計画区域情報_区域データ_東広島市_非線引き用途白地
#883都市計画区域情報_区域データ_廿日市市_非線引き用途地域
#884都市計画区域情報_区域データ_廿日市市_非線引き用途白地
#891都市計画区域情報_区域データ_安芸高田市_非線引き用途地域
#892都市計画区域情報_区域データ_安芸高田市_非線引き用途白地
#897都市計画区域情報_区域データ_江田島市_非線引き用途地域
#898都市計画区域情報_区域データ_江田島市_非線引き用途白地
#927都市計画区域情報_区域データ_広島県_非線引き用途地域
#928都市計画区域情報_区域データ_広島県_非線引き用途白地
#938都市計画区域情報_区域データ_北広島町_非線引き用途地域
#939都市計画区域情報_区域データ_北広島町_非線引き用途白地

実行コマンド:

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

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

スクリプト(全体ソースコード)

⬇ L27_nonline_use_zones.py

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

1. 学習目標と問い

研究の問い (RQ)

広島県内 13 非線引き市町に指定された「非線引き都市計画区域」内において、 用途地域指定 (KUIKI_CD=3)用途白地 (KUIKI_CD=4) は 面積比・地理分布・市町別パターンの観点でどのような構造を持ち、 L18 線引き市町の「市街化:調整」構造とどう異なるのか? 非線引き市町は実態として「ほぼ全域が用途白地」= 都市制御が 最低限に留まる地域なのか?

独自用語の定義 (本記事冒頭での明示)

立てた仮説 H1〜H5

到達点

本記事を通じて学習者は以下を身につける:

  1. 2 シリーズ × 13 市町 × 各 14 ファイル = 28 GeoJSON を縦結合する標準パターン (L18 互補ペア + L26 単純構造の融合)
  2. 「ペア合体 OK」の判断基準: 列構造完全一致 + CRS 一致 + 互補意味を 実データで検証する手順
  3. L18 線引き / L26 区域外 / L27 非線引き の3 系統で広島県土を分解する見方 ─ 都市計画法の制度設計が「面積でどう現れるか」
  4. 用途地域指定率 ─ 同じ「非線引き」でも市町タイプで桁違いに変わる 比率指標の作り方
  5. 連続塊数 vs 平均面積の log-log 散布で「集中型 vs 分散型」を 一目で見せる構造可視化

2. 使用データ

L27 シリーズ — 「非線引き用途地域」+「非線引き用途白地」 計 28 dataset_id

本記事は DoBoX 内の 2 シリーズ:

完全互補ペアとして合体し、合計 28 dataset_id を扱う。 DoBoX のシリーズで 「線引き」 (L18) や 「区域外」 (L26) と同様、 市町ごとに個別 dataset_idとして配信されている。

dataset_id名称 (DoBoXリンク)都市タイプ地理タイプ本記事区分本記事ローカル
802区域データ_呉市_非線引き用途地域中核市都市用途 (KUIKI=3)ZIP DL
803区域データ_呉市_非線引き用途白地中核市都市白地 (KUIKI=4)ZIP DL
809区域データ_竹原市_非線引き用途地域都市用途 (KUIKI=3)ZIP DL
810区域データ_竹原市_非線引き用途白地都市白地 (KUIKI=4)ZIP DL
819区域データ_三原市_非線引き用途地域都市用途 (KUIKI=3)ZIP DL
820区域データ_三原市_非線引き用途白地都市白地 (KUIKI=4)ZIP DL
829区域データ_尾道市_非線引き用途地域都市用途 (KUIKI=3)ZIP DL
830区域データ_尾道市_非線引き用途白地都市白地 (KUIKI=4)ZIP DL
845区域データ_府中市_非線引き用途地域中山間用途 (KUIKI=3)ZIP DL
846区域データ_府中市_非線引き用途白地中山間白地 (KUIKI=4)ZIP DL
853区域データ_三次市_非線引き用途地域中山間用途 (KUIKI=3)ZIP DL
854区域データ_三次市_非線引き用途白地中山間白地 (KUIKI=4)ZIP DL
859区域データ_庄原市_非線引き用途地域中山間用途 (KUIKI=3)ZIP DL
860区域データ_庄原市_非線引き用途白地中山間白地 (KUIKI=4)ZIP DL
873区域データ_東広島市_非線引き用途地域施行時特例市都市用途 (KUIKI=3)ZIP DL
874区域データ_東広島市_非線引き用途白地施行時特例市都市白地 (KUIKI=4)ZIP DL
883区域データ_廿日市市_非線引き用途地域都市用途 (KUIKI=3)ZIP DL
884区域データ_廿日市市_非線引き用途白地都市白地 (KUIKI=4)ZIP DL
891区域データ_安芸高田市_非線引き用途地域中山間用途 (KUIKI=3)ZIP DL
892区域データ_安芸高田市_非線引き用途白地中山間白地 (KUIKI=4)ZIP DL
897区域データ_江田島市_非線引き用途地域離島用途 (KUIKI=3)ZIP DL
898区域データ_江田島市_非線引き用途白地離島白地 (KUIKI=4)ZIP DL
938区域データ_北広島町_非線引き用途地域中山間用途 (KUIKI=3)ZIP DL
939区域データ_北広島町_非線引き用途白地中山間白地 (KUIKI=4)ZIP DL
944区域データ_世羅町_非線引き用途地域中山間用途 (KUIKI=3)ZIP DL
945区域データ_世羅町_非線引き用途白地中山間白地 (KUIKI=4)ZIP DL
927区域データ_広島県_非線引き用途地域 (整合性検証用)県全域用途 (KUIKI=3)ZIP DL
928区域データ_広島県_非線引き用途白地 (整合性検証用)県全域白地 (KUIKI=4)ZIP DL

列構造 (実データで確認、5 列共通)

列名意味・取り得る値
FIDintポリゴン番号 (市町×種別内 0 起点連番)
TOKEI_CDint 統計区分コード = 全件 1 一定。L26 では 3 一定、L18 では未確認。 おそらく統計年次フラグだが、本シリーズでは可変情報を持たない
CITY_CDint 市区町村コード。13 種類 (202=呉, 203=竹原, 204=三原, 205=尾道, 208=府中市, 209=三次, 210=庄原, 212=東広島, 213=廿日市, 214=安芸高田, 215=江田島, 369=北広島, 462=世羅)。広島市 (788) は本記事に登場しない (純線引き市町)
KUIKI_CDint 3 = 用途地域指定 / 4 = 用途白地。本記事の主軸変数。 L18 (1=市街化/2=調整) と意味体系を共有し、3 と 4 で「非線引き内の用途有無」を表す
KUIKI_TBint 市町×KUIKI_CD 内のサブ通番 (1,2,3,...)。同じ市町×KUIKI_CD でポリゴンが 複数あるとき細分番号として使われる。FID と似ているが範囲が異なる
geometryPolygon EPSG:6671 (JGD2011 平面直角 III, 広島県, 単位 m) で記録。 28 件中 MultiPolygon は 0 件 ─ すべて単純 Polygon

ペア合体の妥当性検証 (本記事の前提)

項目用途地域 (KUIKI=3)用途白地 (KUIKI=4)判定
列構成 FID, TOKEI_CD, CITY_CD, KUIKI_CD, KUIKI_TB, geometry FID, TOKEI_CD, CITY_CD, KUIKI_CD, KUIKI_TB, geometry ✓ 完全一致
CRSEPSG:6671EPSG:6671✓ 一致
geom_typePolygon のみPolygon のみ✓ 一致
KUIKI_CD ユニーク{3}{4} ✓ 排他 (合体しても KUIKI_CD で常に区別可能)
CITY_CD 集合13 種13 種✓ 完全一致
13 市町合計件数7858 (独立)
13 市町和 vs 県全域65.044 vs 65.044 km² 750.032 vs 750.032 km² ✓ 誤差 0.0000/0.0000 km²

結論: 列構造・CRS・意味体系が一致する完全互補ペアであるため、 本記事は例外的に 2 シリーズの合体を採用する (L18 市街化±と同じパターン)。 合体後、KUIKI_CD で常に元の系統を識別できる。

L18・L26 との関係 — 「広島県土の都市計画 3 分解」

記事シリーズKUIKI_CD市町数意味
L18市街化 + 調整1, 213 市町 (線引き) 線引きの開発↔抑制の二分制度
L27 (本記事)非線引き用途 + 白地 3, 413 市町 (非線引き) 非線引きの用途指定有無
L26都市計画区域外(列なし)17 市町 都市計画法の網がかからない地域

3 つの記事は KUIKI_CD で連続的に対応 (1,2 / 3,4 / 区域外)。 広島県土を「線引き都計区域」+「非線引き都計区域」+「区域外」の3 区分で完全分解できる。

3. ダウンロード — 再現用ファイル一式

本ページの全結果は以下のローカルファイルから再現可能。

ファイル内容DL
L27_load_log.csv 28 GeoJSON のロードログ (列・件数・KUIKI_CD・CITY_CD) CSV
L27_city_summary.csv 13 市町別 用途/白地 面積・件数・連結成分・人口密度 CSV
L27_polygons_all.csv 136 ポリゴン全件の属性 (geometry 抜き) CSV
L27_city_kind_dissolved.csv 市町×種別 dissolve 集計 (連結成分・周長・円形度) CSV
L27_crosstab_area.csv 13 市町 × 用途/白地 面積クロス + 用途指定率% CSV
L27_rtype_agg.csv 地理タイプ別 (都市/中山間/離島) の集計 CSV
L27_dual_pure_agg.csv 両用市町 vs 純非線引き市町 の用途指定率比較 CSV
L27_scale_class.csv 規模クラス × 用途/白地 件数・面積 CSV
L27_kuiki_tb.csv KUIKI_TB (細分番号) × 用途/白地 集計 CSV
L27_nonline_use_zones.py 本記事の再現スクリプト (このページの全結果を再生成) PY

図 (PNG) ダウンロード

データ取得スクリプト

下記のコマンドで 28 件を一括取得 (キャッシュ済みファイルはスキップ):

cd "2026 DoBoX 教材"
py -X utf8 data\extras\L27_nonline_use_zones\fetch_nonline_use_zones.py

各 GeoJSON は data/extras/L27_nonline_use_zones/{use|white}_<dsid>_<city>.zip に保存される (KUIKI_CD=3 を use_ プレフィクス、KUIKI_CD=4 を white_ プレフィクスで識別)。

4. 分析1: 28 GeoJSON 統合とロードログ

狙い

28 個の GeoJSON を 1 個の GeoDataFrame に縦結合する。 L18 (互補ペア 28 件) と L26 (単純 18 件) を融合した手法になる。 読み込み時点で 列構造の一致CRS の一致を確認し、 「ペア合体 OK」を実データで証明することが本記事の最初の研究上の貢献である。

手法 — 互補ペアの縦結合パターン

  1. 市町ごとに 用途白地 の両方の ZIP→GeoJSON を読込
  2. 共通列 5 つ (FID, TOKEI_CD, CITY_CD, KUIKI_CD, KUIKI_TB) のみ抽出
  3. 派生列 (src_city, src_dsid, src_kind, ctype, rtype) を付加
  4. EPSG:6671 (JGD2011 平面直角 III) で統一
  5. 13 市町×2 種類 = 26 GDF を pd.concat で 1 個に統合
  6. 面積を geometry.area で直接計算 (m² → km²)

「KUIKI_CD で系統識別」の発見: 用途と白地は別の dataset_id だが、 合体すると KUIKI_CD == 3 で用途、KUIKI_CD == 4 で白地が 復元できる。ZIP のファイル名 (use_/white_) に頼らず、 属性値だけで系統を完全に区別できる ─ これは「データ自体の自己記述性」の好例。 学習者は「ファイル名は補助、属性値が真の識別子」という DataOps の原則を学べる。

実装

L27_nonline_use_zones.py 行 1405–1497

 1
 2
 3
 4
 5
 6
 7
 8
 9
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
COMMON_COLS = ["FID", "TOKEI_CD", "CITY_CD", "KUIKI_CD", "KUIKI_TB", "geometry"]
frames = []
for use_ds, white_ds, name, ctype, rtype, _, _ in CITY_DEFS:  # 13 市町
    # KUIKI_CD=3: 用途地域
    g_u = load_geojson_zip(DATA_DIR / f"use_{use_ds}_{name}.zip")[COMMON_COLS]
    g_u = g_u.copy()
    g_u["src_city"] = name; g_u["src_kind"] = "use"
    g_u["ctype"] = ctype;   g_u["rtype"] = rtype
    g_u = g_u.to_crs(TARGET_CRS)
    frames.append(g_u)
    # KUIKI_CD=4: 用途白地
    g_w = load_geojson_zip(DATA_DIR / f"white_{white_ds}_{name}.zip")[COMMON_COLS]
    g_w = g_w.copy()
    g_w["src_city"] = name; g_w["src_kind"] = "white"
    g_w["ctype"] = ctype;   g_w["rtype"] = rtype
    g_w = g_w.to_crs(TARGET_CRS)
    frames.append(g_w)

zone = gpd.GeoDataFrame(pd.concat(frames, ignore_index=True),
                        geometry="geometry", crs=TARGET_CRS)
zone["KUIKI_NAME"] = zone["KUIKI_CD"].map(lambda c: KUIKI_INFO[c][0])
zone["geom_area_km2"] = zone.geometry.area / 1e6

結果: ロードログ表 (table 1)

dsidcitykindctypertypen_polykuiki_cdstokei_cdscity_cdsextra_cols
802呉市use中核市都市931202-
803呉市white中核市都市841202-
809竹原市use都市631203-
810竹原市white都市841203-
819三原市use都市431204-
820三原市white都市141204-
829尾道市use都市631205-
830尾道市white都市1541205-
845府中市use中山間231208-
846府中市white中山間141208-
853三次市use中山間1031209-
854三次市white中山間141209-
859庄原市use中山間1031210-
860庄原市white中山間341210-
873東広島市use施行時特例市都市1031212-
874東広島市white施行時特例市都市1141212-
883廿日市市use都市231213-
884廿日市市white都市241213-
891安芸高田市use中山間231214-
892安芸高田市white中山間141214-
897江田島市use離島531215-
898江田島市white離島141215-
938北広島町use中山間931369-
939北広島町white中山間141369-
944世羅町use中山間331462-
945世羅町white中山間541462-

この表から読み取れること

結果: 整合性検証 (13 市町和 vs 県全域版 ds=927/928)

項目用途 (KUIKI=3)白地 (KUIKI=4)
13 市町別 ポリゴン件数7858
県全域版 ポリゴン件数7858
13 市町和 面積65.044 km²750.032 km²
県全域版 面積65.044 km²750.032 km²
0.0000 km² (0.0000 %) 0.0000 km² (0.0000 %)

この表から読み取れること

図 1: 県全域 主題図 — 用途地域 (赤) と 用途白地 (緑)

なぜこの図か: 13 非線引き市町を 1 枚で俯瞰し、 「赤=指定あり」「緑=指定なし」の地理分布を直観把握するため。 赤 (用途) を上に重ねるのは、サイズが小さい用途を見えなくしないため。

図1: 13 非線引き市町 — 用途地域 (赤, KUIKI=3) と 用途白地 (緑, KUIKI=4)。緑が県北部の中山間部を支配し、赤は中心市街地に点在。
図1: 13 非線引き市町 — 用途地域 (赤, KUIKI=3) と 用途白地 (緑, KUIKI=4)。緑が県北部の中山間部を支配し、赤は中心市街地に点在。

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

5. 分析2: 市町別 用途指定率と地理分布

狙い

市町ごとに用途地域指定率 (= 用途 / (用途+白地)) を計算し、 仮説 H1 (合計 1:9 程度) と H2 (町部 > 大市) を検証する。 choropleth・stacked bar・small multiples の 3 つの可視化を組み合わせ、 「用途指定の地理的偏り」を多角的に観察する。

手法 — クロス集計 + 派生指標

  1. zone.dissolve(by=["src_city","KUIKI_CD"]) で 市町×種別の融合ジオメトリを得る (連結成分数の計算用)
  2. 市町別 use_area_km2white_area_km2 を集計
  3. use_share_pct = 用途 / (用途+白地) を派生
  4. L15 行政面積を nonline_in_admin_pct の分母に使用
  5. L16 都計区域面積を nonline_in_plan_pct の分母に使用
  6. 地理タイプ (rtype: 都市/中山間/離島) と都市タイプ (ctype) で群別集計

実装

L27_nonline_use_zones.py 行 1514–1580

 1
 2
 3
 4
 5
 6
 7
 8
 9
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
zone_diss = zone.dissolve(by=["src_city", "KUIKI_CD"], as_index=False)
zone_diss["dissolve_area_km2"] = zone_diss.geometry.area / 1e6
zone_diss["n_parts"] = zone_diss.geometry.apply(n_parts)

city_summary_rows = []
for use_ds, white_ds, name, ctype, rtype, _, _ in CITY_DEFS:
    sub = zone_diss[zone_diss["src_city"] == name]
    a_u = sub.loc[sub["KUIKI_CD"]==3, "dissolve_area_km2"].sum()
    a_w = sub.loc[sub["KUIKI_CD"]==4, "dissolve_area_km2"].sum()
    a_nonline = a_u + a_w
    use_share = a_u / a_nonline * 100 if a_nonline > 0 else 0
    admin_a = float(admin_diss[admin_diss["city"]==name]["admin_area_km2"].iloc[0])
    plan_a = float(l16_diss[l16_diss["city"]==name]["plan_area_km2"].iloc[0])
    city_summary_rows.append({
        "city": name, "ctype": ctype, "rtype": rtype,
        "use_area_km2": a_u, "white_area_km2": a_w,
        "nonline_area_km2": a_nonline,
        "use_share_pct": use_share,
        "nonline_in_plan_pct": a_nonline / plan_a * 100,
        "nonline_in_admin_pct": a_nonline / admin_a * 100,
    })
city_summary = pd.DataFrame(city_summary_rows)

結果: 13 市町別サマリ表 (table 2)

cityctypertypedual_or_pureadmin_area_km2use_area_km2white_area_km2use_share_pctnonline_in_admin_pctn_polys_usen_polys_white
呉市中核市都市両用 (線引き併存)3886.4585.67.0023.798
竹原市都市純非線引き1188.97108.97.61100.068
三原市都市両用 (線引き併存)4793.0254.35.2712.041
尾道市都市両用 (線引き併存)2968.9486.79.3532.3615
府中市中山間両用 (線引き併存)1960.996.014.153.621
三次市中山間純非線引き7789.8880.710.9111.6101
庄原市中山間純非線引き12477.7468.510.166.1103
東広島市施行時特例市都市両用 (線引き併存)6355.31111.14.5618.31011
廿日市市都市両用 (線引き併存)4892.6367.23.7614.322
安芸高田市中山間純非線引き5381.7911.113.872.421
江田島市離島純非線引き1002.1133.45.9435.651
北広島町中山間純非線引き6464.8324.416.524.591
世羅町中山間純非線引き2782.3912.216.445.235

この表から読み取れること

図 2: 13 市町 small multiples

なぜこの図か: 全県主題図 (図 1) では市町ごとの細かい構造が潰れる。 small multiples なら各市町の用途/白地の地理的配置を独立に観察できる。

図2: 13 市町 small multiples — 各市町の行政区域 (灰色) を背景に、緑=白地、赤=用途。タイトルに用途比率と件数。
図2: 13 市町 small multiples — 各市町の行政区域 (灰色) を背景に、緑=白地、赤=用途。タイトルに用途比率と件数。

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

図 3: choropleth — 市町別 用途地域指定率

なぜこの図か: 「絶対面積」より「比率 (%)」で見ると地理的傾斜が 鮮明になる。choropleth は数字の地理勾配を直接見せる王道。

図3: choropleth — 市町別 用途地域指定率 (%)。赤が濃いほど用途指定が多い。
図3: choropleth — 市町別 用途地域指定率 (%)。赤が濃いほど用途指定が多い。

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

図 4: 用途指定率 ランキング + stacked bar

なぜこの図か: 順位とスケールを 2 つのパネルに分けることで、 「比率の偏り」(左) と「絶対面積の偏り」(右) を別々に把握できる。

図4: 左=用途指定率ランキング (全県平均線あり)、右=非線引き面積 stacked。色分けは地理タイプ。
図4: 左=用途指定率ランキング (全県平均線あり)、右=非線引き面積 stacked。色分けは地理タイプ。

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

6. 分析3: 連続性スケール (用途 vs 白地 の構造比較)

狙い

用途地域ポリゴンと用途白地ポリゴンは、連続塊の数1 個あたり面積で どう違うか? 仮説 H3 (用途=少数集中・白地=多数+巨大) を検証する。 log-log 散布図で「集中型 vs 分散型」を一望する。

手法 — 件数・平均面積・規模分類

  1. 市町×種別ごとに ポリゴン件数1 個あたり平均面積 を計算
  2. 横軸: 件数 (log)、縦軸: 平均面積 (log) の散布図
  3. 用途と白地で 2 パネルを並べ、構造を直接比較
  4. 全 136 ポリゴンを 5 段階の規模クラスに分類: 微小 <0.1 / 小 0.1-1 / 中 1-10 / 大 10-100 / 巨大 ≥100 km²
  5. 規模クラス × 用途/白地 の件数・面積をクロス集計し、Pareto 性を確認

実装

L27_nonline_use_zones.py 行 423–464

 1
 2
 3
 4
 5
 6
 7
 8
 9
432
433
434
435
436
437
438
439
440
def _scale_class(v):
    if v < 0.1:    return "0_微小(<0.1 km²)"
    elif v < 1:    return "1_小(0.1-1 km²)"
    elif v < 10:   return "2_中(1-10 km²)"
    elif v < 100:  return "3_大(10-100 km²)"
    else:          return "4_巨大(≥100 km²)"

zone["scale_class"] = zone["geom_area_km2"].apply(_scale_class)
scale_overall = zone.groupby(["src_kind", "scale_class"]).agg(
    n=("geom_area_km2", "size"),
    area_km2_sum=("geom_area_km2", "sum"),
).reset_index()

# 市町別「件数 × 平均面積」
city_summary["mean_area_use"] = (
    city_summary["use_area_km2"] / city_summary["n_polys_use"])
city_summary["mean_area_white"] = (
    city_summary["white_area_km2"] / city_summary["n_polys_white"])

図 5: 連続性スケール (件数 × 平均面積)

なぜこの図か: 「件数だけ」では大ポリゴンと小ポリゴンの違いが見えない。 log-log 散布図は連続性の構造を 2 次元に展開できる。 左 (用途) と右 (白地) を並べることで、同じ市町が両系統でどう振る舞うかを比較できる。

図5: 連続性スケール — 左=用途、右=白地。各点は 13 市町の 1 つ。横軸=件数(log), 縦軸=平均面積(log)。
図5: 連続性スケール — 左=用途、右=白地。各点は 13 市町の 1 つ。横軸=件数(log), 縦軸=平均面積(log)。

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

結果: 規模クラス × 種別 件数表 (table 3)

src_kindscale_classnarea_km2_sum
use0_微小(<0.1 km²)80.41
use1_小(0.1-1 km²)4921.86
use2_中(1-10 km²)2142.78
white0_微小(<0.1 km²)230.51
white1_小(0.1-1 km²)123.96
white2_中(1-10 km²)519.74
white3_大(10-100 km²)17618.43
white4_巨大(≥100 km²)1107.39

この表から読み取れること

図 9: 規模クラス × 用途/白地 件数+面積

なぜこの図か: 件数と面積でクラス別の支配度合いが逆転することを 明示する。用途と白地を並列バーで描くことで、両系統の構造の違いを 1 枚で示せる。

図9: 左=件数 (用途 vs 白地)、右=面積。用途は中規模、白地は大・巨大に偏る。
図9: 左=件数 (用途 vs 白地)、右=面積。用途は中規模、白地は大・巨大に偏る。

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

7. 分析4: 両用市町 vs 純非線引き市町 (制度設計の影響)

狙い

本記事独自の「両用市町 (線引きと併存) vs 純非線引き市町」分類軸で 用途指定率を比較する。仮説 H2 の核心 (大きな市は線引きで中心市街地を扱うので 非線引き側の用途比率は低い) を直接検証する。

手法 — 群間比較 (散布 + 平均線)

  1. 13 市町を 2 群に分割:
    • 両用 (DUAL_CITIES): 三原市, 呉市, 尾道市, 府中市, 廿日市市, 東広島市 (= L18 線引き市町でもある 6 市)
    • 純非線引き (PURE_NONLINE): 三次市, 世羅町, 北広島町, 安芸高田市, 庄原市, 江田島市, 竹原市 (= 線引きを持たない 7 市町)
  2. 各群の用途指定率の散布 + 平均値を 1 図に並べる
  3. 追加: 用途指定率 vs 人口密度 散布 (H2 の補強)

群分けの根拠: 都市計画法上、線引きは人口集中市町に 適用される強い制度。線引き市町では「中心市街地 = 市街化区域 + 用途地域」が セットで指定されるため、非線引き側に残る部分は「合併で編入された旧町域」などの 周辺部に限られる。一方、純非線引き市町は市町全体が非線引きで、 用途地域が市町スケールでより自由に分布する。制度設計の差が 用途指定率の差を生む、というのが核心的仮説 H2 である。

実装

L27_nonline_use_zones.py 行 1743–1792

 1
 2
 3
 4
 5
 6
 7
 8
 9
1752
1753
1754
1755
1756
1757
L18_CITIES = {"広島市","呉市","三原市","尾道市","福山市","府中市","大竹市",
              "東広島市","廿日市市","府中町","海田町","熊野町","坂町"}
DUAL_CITIES = sorted(set(ALL_CITIES) & L18_CITIES)
PURE_NONLINE = sorted(set(ALL_CITIES) - L18_CITIES)

city_summary["dual_or_pure"] = city_summary["city"].apply(
    lambda c: "両用 (線引き併存)" if c in DUAL_CITIES else "純非線引き")

dual_agg = city_summary.groupby("dual_or_pure").agg(
    n_cities=("city", "size"),
    use_sum=("use_area_km2", "sum"),
    white_sum=("white_area_km2", "sum"),
).reset_index()
dual_agg["use_share_pct"] = dual_agg["use_sum"] / (
    dual_agg["use_sum"] + dual_agg["white_sum"]) * 100

結果: 両用 vs 純非線引き 集計表 (table 4)

dual_or_puren_citiesuse_sumwhite_sumnonline_sumuse_share_pct
両用 (線引き併存)627.3410.9438.26.24
純非線引き737.7339.1376.810.01

この表から読み取れること

図 8: 両用 vs 純非線引き 比較

なぜこの図か: 2 群の用途指定率を散布で並べ、各群の平均線を重ねることで、 「群内のばらつき」と「群間の差」を同時に見せる。箱ひげの代わりに 点散布 + 平均線を選んだのは、各市町の名前を維持して読者が個別事例を追えるため。

図8: 両用 (左、6 市) vs 純非線引き (右、7 市町) の用途指定率比較。各点は 1 市町、横線は群平均。
図8: 両用 (左、6 市) vs 純非線引き (右、7 市町) の用途指定率比較。各点は 1 市町、横線は群平均。

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

図 7: 用途指定率 vs 人口密度 散布

なぜこの図か: 「人口密度 = 都市化の度合い」と 「用途指定率 = 制度の使われ方」の関係を直接見る。仮説 H2 の補強。

図7: 用途指定率 vs 人口密度。横軸=人口密度(千人/km²), 縦軸=用途指定率(%)。色=地理タイプ。
図7: 用途指定率 vs 人口密度。横軸=人口密度(千人/km²), 縦軸=用途指定率(%)。色=地理タイプ。

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

8. 分析5: L18 線引きとの比較・整合性検証

狙い

L18 (線引き市町の市街化:調整) と L27 (非線引き市町の用途:白地) を並列に並べ、 広島県の都市計画制度の2 つの運用形態がどれだけ非対称構造に違うかを示す。 仮説 H1 (L27 の方が L18 より非対称) を視覚的に検証する。 合わせて、13 市町和 vs 県全域版の整合性検証 (H4) も提示する。

手法 — 比率の並列比較 + 整合性検証

  1. L18_city_summary.csv から線引き面積比を再読込
  2. L18 「市街化:調整」と L27 「用途:白地」を 2 本の stacked bar で並べる
  3. 合計面積と各群の比率を同じ図に併記
  4. 整合性検証: 13 市町和 vs 県全域 ds=927/928 を 2 パネル並列バーで

実装

L27_nonline_use_zones.py 行 1832–1857

 1
 2
 3
 4
 5
 6
 7
 8
 9
1841
l18_csv = ASSETS / "L18_city_summary.csv"
if l18_csv.exists():
    l18_df = pd.read_csv(l18_csv, encoding="utf-8-sig")
    l18_kuiki_sum = l18_df["kuiki_area_km2"].sum()
    l18_tyousei_sum = l18_df["tyousei_area_km2"].sum()
    l18_ratio = l18_kuiki_sum / (l18_kuiki_sum + l18_tyousei_sum) * 100

ratios = [l18_ratio, USE_SHARE_PCT]
totals = [l18_kuiki_sum + l18_tyousei_sum, A_NONLINE_TOTAL]
# stacked bar: 上段=開発側 (市街化/用途), 下段=抑制側 (調整/白地)

図 10: L18 線引き vs L27 非線引き 並列構成比

なぜこの図か: 「線引きの 1:3」と「非線引きの 1:9」を視覚的に直接対比。 広島県の都市計画法運用の「2 つのレジーム」が どれだけ非対称構造の度合いが違うかを 1 枚で示す。

図10: 左=L18 線引き (市街化 vs 調整)、右=L27 非線引き (用途 vs 白地)。両者の開発側 (赤) vs 抑制側 (緑) 比率。
図10: 左=L18 線引き (市街化 vs 調整)、右=L27 非線引き (用途 vs 白地)。両者の開発側 (赤) vs 抑制側 (緑) 比率。

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

図 6: 整合性検証 — 13 市町和 vs 県全域版

なぜこの図か: データ取得の正しさを独立に検証するため。 DoBoX が市町別と県全域版の 2 系統で配信している場合、両者が一致するか 確認することはデータパイプラインの基本作法。

図6: 整合性検証 — 用途 (左) と白地 (右) で、13 市町和と県全域版を並列バーで対比。差はサブミリ km² レベル。
図6: 整合性検証 — 用途 (左) と白地 (右) で、13 市町和と県全域版を並列バーで対比。差はサブミリ km² レベル。

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

図 11: 市町別 非線引き面積の行政面積に対する比率

なぜこの図か: 「非線引き計が市町をどこまで覆うか」を可視化。 非線引き = 用途+白地の合計と、行政面積に対する比率を同時に見る。

図11: 市町別 行政面積に占める非線引き (=用途+白地) の比率。赤=用途・緑=白地・灰=非線引き外。
図11: 市町別 行政面積に占める非線引き (=用途+白地) の比率。赤=用途・緑=白地・灰=非線引き外。

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

9. 仮説検証と考察

仮説検証 まとめ

仮説内容結果判定
H1用途:白地 ≈ 1:9 (非対称性、線引き 1:3 より強)用途 65.0 : 白地 750.0 = 1 : 11.5, 用途比 7.98%支持
H2町部 (北広島・世羅) の用途比率 > 大きな市部 (東広島・廿日市)町部平均 16.48% / 大市部平均 4.16% (4.0 倍)支持
H3用途=少数集中、白地=多数+巨大用途平均件数 6.0 件・1個あたり 0.86 km²、白地平均件数 4.5 件・1個あたり 23.76 km²支持
H413 市町和 = 県全域 ds=927/928 (整合性)用途: 差 0.0000 km² (0.0000%) / 白地: 差 0.0000 km² (0.0000%) / 件数 用途 78=78 ✓ 白地 58=58 ✓支持
H5KUIKI_CD は 用途=3 / 白地=4 で一定 (互補ペア)用途ファイル KUIKI_CD = [3], 白地ファイル KUIKI_CD = [4]支持

主要発見 (本記事独自)

  1. 非線引き = ほぼ全域が「白地」: 13 市町合計で 用途:白地 = 65:750 km² = 1:11.5。 広島県内の非線引き都市計画区域は事実上「用途指定なしの白地が県土の標準」と 定量化された。これは線引きの 1:3 (L18) と比べて3 倍以上の偏りであり、 「都市計画区域」と一括りにできない強い制度内不均一性を示す。
  2. 用途指定率には「両用 vs 純非線引き」の制度的な差がある: 両用市町 (三原市, 呉市, 尾道市, 府中市, 廿日市市, 東広島市) は中心市街地を線引き側で扱うため、 非線引き側は周辺合併編入旧町域に限られ、用途指定率が低い (平均 6.2%)。 純非線引き市町 (三次市, 世羅町, 北広島町, 安芸高田市, 庄原市, 江田島市, 竹原市) は中心も周辺も非線引きで一貫運用するため、 比率では用途指定が相対的に高い (平均 10.0%)。 制度設計の選択が指標の見え方を変える典型例。
  3. 用途と白地の連続塊構造は逆位相: 用途は中心市街地に小ポリゴン (平均 0.86 km²) として分散して指定され、白地は周辺農村部・山地に巨大ポリゴン (平均 23.8 km²) として広がる。1 個あたり面積で28 倍の差。 用途と白地は同じ非線引き内の二項対立だが、地理的「集中型 vs 分散型」として 全く別の振る舞いを示す。
  4. L26 (区域外無し3町) と L27 (本記事 13 市町) は対応関係を持つ: L26 で記述した「区域外を持たない」竹原市は、本記事 L27 でも全市が 非線引きで覆われる ─ L16 都計区域 = 非線引きと読める。 L26 (3 町) + L27 (13 市町) + L18 (重複 6 市) で広島県の都市計画区域構造を 分解できる。
  5. 監査未経シリーズの「列構造の純粋さ」: 5 列のみ (FID, TOKEI_CD, CITY_CD, KUIKI_CD, KUIKI_TB) という最小構成。L24/L25 にあった NRG_AN・RITTEKI_CD は無く、 KUIKI_CD だけで「用途/白地」を識別する。データが純粋なほど合体ペアの判定は 容易になる、という DataOps の教訓。

考察 — 「ゆるい都市制御」とは何か

本記事の数字 (用途:白地 ≈ 1:9) は、広島県の非線引き市町における 都市計画法運用が「ほとんど何も指定していない」という事実を強く示す。 これは放置ではなく制度的選択: 中山間市町では人口・経済規模が小さく、 中心部以外を細かく区分する経済合理性が乏しい。「白地」は無秩序ではなく、 「最低限の規制 (建築基準法単体規定) で十分」という暗黙の判断の結果である。

一方、両用市町 (呉・三原・尾道・府中市・東広島・廿日市) は 線引きと非線引きを使い分け、「中心は強く、周辺は緩く」という二段階の制御を実現。 これは都市計画法の制度設計が想定した 「市町の地理多様性に対応した使い分け」の 広島県内での実装例といえる。

本記事の独自貢献は、「用途地域指定率」という 1 指標で 広島県内 13 非線引き市町の制度運用の強度を比較可能にしたこと。 これにより各市町の「都市計画思想」を定量化できる土壌が整う。

L18・L26 との 3 系統合算: 県土の都市計画分解

系統記事本記事との合計対象面積 (km²)件数
線引き市街化L18 KUIKI=1 423.4 153
線引き調整L18 KUIKI=2 1151.2 181
非線引き用途L27 KUIKI=3 (本記事) 65.07813 非線引き市町
非線引き白地L27 KUIKI=4 (本記事) 750.05813 非線引き市町
区域外L26 (KUIKI 列なし)(L26 で記述)17 市町

4 つの面積カテゴリ (市街化・調整・用途・白地) + 区域外 = 県土全体。 将来の研究: 「広島県全土を 5 区分で完全分解する地図」が L18+L27+L26 統合で実現可能。

10. 発展課題

発展課題 (結果X → 新仮説Y → 課題Z の3段)

課題 1: 「白地で開発されている建物」を建物ポリゴンと重ねて検出

結果X: 用途白地は非線引き面積の 92% を占め、ほぼ規制が無いに等しい。

新仮説Y: 「白地」エリアでも実際には宅地開発・商業開発が行われており、 都市計画法の用途規制が事実上機能していないホットスポットがあるはず。

課題Z: DoBoX の建物データ (国土地理院・PLATEAU 等の建物 polygons) を 本記事の白地ポリゴン (KUIKI_CD=4) と gpd.sjoin で空間結合し、 白地内の建物密度を計算。建物密度上位 10 ポリゴンを「白地ホットスポット」として 取り出し、その地理特徴を分析せよ。「規制無しでも市街化が進む地域」 = 線引き不要論の 根拠データになる。

課題 2: 用途地域種別 (YOTO_CD) との突合 ─ 用途の「中身」分析

結果X: 本記事は KUIKI_CD で用途/白地を分けたが、用途地域内部の13 種類の細分 (住居系/商業系/工業系/田園系) は KUIKI_TB 列で記録されつつも、本記事では深く扱わなかった。

新仮説Y: 非線引き市町の用途地域は、住居系が大半で、 商業・工業はほとんど指定されないはず (中山間ゆえ)。 これは線引き市町 (L17 で 13 種すべて指定あり) と対照的な構造。

課題Z: L17 用途地域シリーズ (YOTO_CD 13 種) を本記事の 13 非線引き市町分だけ 抽出し、KUIKI_TB と YOTO_CD のマッピングを実データで突合。 「非線引き 13 市町で実際に使われている用途地域種類」を集計し、L17 全 21 市町との 構造比較を行う。「制度の使い込み度」の市町間ばらつきを定量化できる。

課題 3: 時系列比較 ─ 都市計画変更の歴史的トレンド分析

結果X: 本記事のデータは 2024-2025 年時点。用途指定率の市町差はあるが、 これが歴史的に固定変化中かは不明。

新仮説Y: 過去 20 年で純非線引き市町 (世羅・北広島など) では 用途地域が新規指定で増えた一方、両用市町 (廿日市・東広島など) では 非線引き側はほとんど変化しなかった。これは「市町合併で広域化した市町は 旧町中心市街地を新規に用途指定する必要があった」という仮説。

課題Z: 広島県統計年鑑の都市計画決定 履歴を時系列で取得し、 本記事の地理データと突合。市町合併年 (例: 安芸高田市 = 2004 年合併) と 用途地域指定の追加タイミングを照合。合併前後の制度運用変化を定量化する。 これにより「非線引き制度は静的か動的か」という都市計画研究の核心問いに答えられる。

課題 4: 「白地割合」と人口動態 (高齢化率・転出入率) の関係

結果X: 本記事の white_share_pct は 83-96% の幅で分布。 庄原市 (96.2%) と府中市 (85.8%) では 10 pt の差がある。

新仮説Y: 白地割合が高い (= 用途指定が緩い) 市町ほど、 高齢化率が高く転出超過。「規制無しでも開発されない地域」が 人口減少と直結している可能性。

課題Z: 国勢調査・住民基本台帳から市町別の高齢化率・人口増減率を 取得 (2015→2020 など)。本記事の white_share_pct と相関分析 (Pearson r、Spearman ρ)。 都市計画の「ゆるさ」と人口動態のフィードバック構造を実証する研究になる。

課題 5: 県境を越えた比較 ─ 岡山県・島根県との制度運用比較

結果X: 本記事は広島県内 13 市町だけを扱った。 広島県の用途指定率 8% は他県と比べて高いか低いか? は不明。

新仮説Y: 中国地方の中山間県 (島根・岡山県北部) でも同様に「ほぼ全域白地」だが、 都市部のある県 (岡山県南部) では用途指定率が広島県より高いはず。

課題Z: 岡山県 PCDL や島根県オープンデータポータルから類似の用途地域 GeoJSON を 取得し、本記事と同じ集計を再実行。中国地方 5 県の「都市計画運用の地理勾配」を 比較地図化する。広島県の特殊性 (or 普通さ) を相対的に判定できる。