Lesson 30

L30 各種法令の規制情報 17 件統合分析 ── 規制空間 (where) と規制手続き (how) の二層構造

L30geopandas法令規制空間二層構造多重規制森林法保安林自然公園被爆樹木shapefilegeojson
所要 40分 / 想定レベル: リテラシ〜実装 / データ: DoBoX 「各種法令の規制情報」シリーズ 17 件 (#1285〜#1298, #1311, #1446, #1625) + L15 行政区域

データ取得手順

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

IDデータセット名
#222dataset #222
#333dataset #333
#444dataset #444
#666dataset #666
#888都市計画区域情報_区域データ_安芸高田市_行政区域
#1285各種法令の規制情報_都市計画法
#1286各種法令の規制情報_広島県砂防指定地管理条例
#1287各種法令の規制情報_急傾斜地の崩壊による災害の防止に関する法律
#1288各種法令の規制情報_地すべり等防止法
#1289各種法令の規制情報_森林法
#1290各種法令の規制情報_自然公園法・広島県立自然公園条例
#1291各種法令の規制情報_広島県自然環境保全条例・広島県自然海浜保全条例
#1292各種法令の規制情報_道路法
#1293各種法令の規制情報_河川法
#1294各種法令の規制情報_広島県普通河川等保全条例
#1295各種法令の規制情報_文化財保護法・広島県文化財保護条例
#1296各種法令の規制情報_建設工事に係る資材の再資源化等に関する法律
#1297各種法令の規制情報_広島県土砂の適正処理に関する条例
#1298各種法令の規制情報_土壌汚染対策法
#1311各種法令の規制情報_被爆樹木基本情報
#1446各種法令の規制情報_建築基準法(指定道路図)
#1625各種法令の規制情報_特定都市河川浸水被害対策法

実行コマンド:

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

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

1. 学習目標と問い

本レッスンは、広島県オープンデータポータル DoBoX「各種法令の規制情報_*」シリーズ 17 件を統合し、 広島県内における各種法令の規制空間 (where) と規制手続き (how) の二層構造を 解読する研究記事です。

研究問い (RQ)
DoBoX「各種法令の規制情報」シリーズ 17 件は、規制空間 (where: 規制が及ぶ地理範囲)規制手続き (how: 申請・届出窓口)二層構造として整備されている。
(1) 規制空間ジオメトリは 17 法令のうちどの法令についてどのような型 (面/線/点) で公開されているか?
(2) 規制手続き Excel は 17 法令でどこまで構造同型か? 市町別「○」表は何市町をカバーするか?
(3) ジオメトリを持つ法令のポリゴン群を県土に重ねたとき、多重規制ホットスポット規制空白地 はどこに現れるか?

独自用語の定義 (要件 M)

仮説 H1〜H6 (要件 D)

到達点

  1. 17 法令という異種データセットの寄せ集めを「二層構造」という統一視点で読む技法
  2. 規制空間ジオメトリの公開状況の不均一さを数値化する手順
  3. 面 polygon の多重重畳分析を grid 化で行う実装 (sjoin + value_counts)
  4. カタログメタ (S14) と実データを組み合わせた検証 (S14 では概念図のみだったものを実証)
  5. 森林法保安林の県土支配性、被爆樹木の爆心地集中など個別法令の幾何特徴を定量化
  6. 図 11 種・表 10 種で 17 法令を多角的に提示 (要件 Q)
注: 17 法令の合体について
本シリーズ 17 件は、形式・構造が完全にバラバラです:
  • geo (5 件): GeoJSON 1 件 / Shapefile 4 件 / CRS と列構造が法令ごとに異なる
  • csv (1 件): 緯度経度を持つ点データ (被爆樹木)
  • xls (11 件): 2 シート構成 (規制内容 + 手続き先) ─ ジオメトリなし
pd.concat による単純合体は禁止。代わりに「二層構造」(where/how) の概念で 役割の違うレイヤとして扱う。 他のシリーズ (S03 区域データ, S07 農地転用 etc.) との合体は禁止

2. 使用データ

本記事で扱う 17 dataset_id は、DoBoX で「各種法令の規制情報_*」 という共通接頭辞を持つシリーズ。 カタログ data/dataset_index.csv 全 551 件のうち 17 件が該当する。

17 法令一覧

dsid法令名略称カテゴリ制定主体 形式ジオメトリ型DoBoX
#1285都市計画法都計法土地利用国法xlspolygonDoBoX
#1286広島県砂防指定地管理条例砂防条例防災県条例xlspolygonDoBoX
#1287急傾斜地崩壊災害防止法急傾斜法防災国法xlspolygonDoBoX
#1288地すべり等防止法地すべり法防災国法xlspolygonDoBoX
#1289森林法森林法自然保護国法geopolygonDoBoX
#1290自然公園法・県立自然公園条例自然公園自然保護併用geopolygonDoBoX
#1291県自然環境保全条例・自然海浜保全条例自然環境自然保護県条例xlspolygonDoBoX
#1292道路法道路法交通・河川国法xlslineDoBoX
#1293河川法河川法交通・河川国法geolineDoBoX
#1294県普通河川等保全条例普通河川交通・河川県条例xlslineDoBoX
#1295文化財保護法・県文化財保護条例文化財文化財併用xlspoint/areaDoBoX
#1296建設リサイクル法リサイクル環境・廃棄物国法xlsnon-spatialDoBoX
#1297県土砂の適正処理条例土砂条例環境・廃棄物県条例xlsnon-spatialDoBoX
#1298土壌汚染対策法土壌汚染環境・廃棄物国法xlsnon-spatialDoBoX
#1311被爆樹木基本情報被爆樹木文化財その他csvpointDoBoX
#1446建築基準法(指定道路図)指定道路土地利用国法geolineDoBoX
#1625特定都市河川浸水被害対策法特河川法防災国法geopolygonDoBoX

二層構造の集計

項目
17 法令の総件数17
where 層 (geo + csv)6 件 (35%)
 geo (GeoJSON / Shapefile)5 件
 csv (緯度経度点)1 件
how 層 (xls のみ)11 件 (65%)
カテゴリ数6
制定主体ユニーク4

where 層 (geo+csv 6 法令) の生サイズ

dsid法令件数面積 km²長さ km点数
#1289森林法polygon10645421.678nannan
#1290自然公園法・県立自然公園条例polygon2201845.728nannan
#1293河川法line1888nan2850.551nan
#1311被爆樹木基本情報point89nannan89.0
#1446建築基準法(指定道路図)line4892nan470.173nan
#1625特定都市河川浸水被害対策法polygon2669.104nannan

how 層 (xls 11 法令) のシート構造

dsid法令シート数シート名 規制種別数市町数
#1285都市計画法2規制内容; 手続き先1023
#1286広島県砂防指定地管理条例2規制内容; 手続き先223
#1287急傾斜地崩壊災害防止法2規制内容; 手続き先123
#1288地すべり等防止法2規制内容; 手続き先123
#1291県自然環境保全条例・自然海浜保全条例2規制内容; 手続き先323
#1292道路法2規制内容; 手続き先523
#1294県普通河川等保全条例2規制内容; 手続き先123
#1295文化財保護法・県文化財保護条例2規制内容; 手続き先323
#1296建設リサイクル法2規制内容; 手続き先123
#1297県土砂の適正処理条例2規制内容; 手続き先323
#1298土壌汚染対策法2規制内容; 手続き先123

3. ダウンロード

本記事の再現性のため、HTML から生データ・中間 CSV・図 PNG・再現 Python が すべて直リンクで取れる。

(1) 生データ

17 法令の生 ZIP / xlsx / csv は前項表の DoBoX リンクから取得できる。 本記事では data/extras/L30_law_regulations/ に保存している。 取得済か確認するスクリプト:

cd "2026 DoBoX 教材"
ls data/extras/L30_law_regulations/   # law_*.zip と sample_*.{xlsx|csv} がある

(2) 中間 CSV (本スクリプトの出力)

(3) 図 PNG

(4) 再現用 Python

実行は cd "2026 DoBoX 教材"; py -X utf8 lessons\L30_law_regulations.py。 法令データが data/extras/L30_law_regulations/ にあれば1 分以内で全図 + CSV 再生成 (要件 S 準拠)。

4. 分析1: 二層構造 ─ 規制空間 (where) と 規制手続き (how)

狙い: 17 法令の公開形式 (geo / csv / xls) を集計し、 「規制空間 (where)」と「規制手続き (how)」の二層構造を実データから可視化する。 H1 (二層構造) と H2 (主体別公開率) を一気に検証する。

可視化の選定理由 (要件 H)

「形式の偏り」を見せるには、format 別件数の棒 + category × format クロスバー が最適。 散布図は 17 件と少ないため意味を持たない。 ヒートマップ (図8) は別セクションで origin × format の構造を補完する。

実装

L30_law_regulations.py 行 1537–1554

1537
1538
1539
1540
1541
1542
1543
1544
# 17 法令を 「format」 でグループ化
laws_df["format"].value_counts()
# geo: 5 / csv: 1 / xls: 11
# → 17 件中 6 件 (35%) のみが機械可読ジオメトリ提供

# カテゴリ × format クロス
pd.crosstab(laws_df["category"], laws_df["format"])
# 自然保護 ─ geo 多 / 環境・廃棄物 ─ xls のみ など、カテゴリで偏りがある
図1: 17 法令の二層構造 ─ 規制空間層 (geo/csv) と 規制手続き層 (xls)
図1: 17 法令の二層構造 ─ 規制空間層 (geo/csv) と 規制手続き層 (xls)

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

結果表: format 別 17 法令内訳

形式件数比率意味
geo529% GeoJSON / Shapefile (面・線)
csv16% 緯度経度を含む点表
xls1165% 2 シート構成の Excel (ジオメトリなし)

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

5. 分析2: 制定主体と公開形式の相関

狙い: 「国法は地理データを公開する、県条例は手続き表のみ」という仮説 (H2) を、 17 法令の origin × format クロス集計で検証する。

仮説の根拠

国土交通省・林野庁・環境省は、国土数値情報として全国一律のレイヤを公開する仕組みを持つ。 森林法保安林は林野庁、自然公園は環境省 + 県庁、河川法は MLIT、特定都市河川も MLIT が GIS 整備済。 一方、県条例 (砂防指定地条例・自然海浜保全条例・普通河川保全条例 etc.) は県独自の整備に依存し、 ジオメトリ整備が進みにくい。

実装

L30_law_regulations.py 行 1594–1603

1594
1595
1596
1597
# 制定主体 × 形式 のクロス
crossOF = pd.crosstab(laws_df["origin"], laws_df["format"])
# 国法 12 件 (うち geo 4)、県条例 4 件 (うち geo 0)、併用 2 件 (うち geo 1)
# → 国法は geo 公開率が高く、県条例は xls のみ という傾向
図8: 17 法令の構造クロス ─ 制定主体・カテゴリ・公開形式
図8: 17 法令の構造クロス ─ 制定主体・カテゴリ・公開形式

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

結果表: origin × format

origingeocsvxlsgeo率
国法4061040%
県条例00440%
併用101250%
その他01010%

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

6. 分析3: xls 11 法令の構造同型性 ─ 二層構造 how 側の統一

狙い: 11 xls 法令のシート構成・規制種別数・市町カバー数を抽出し、 H3 (構造同型性) を検証する。 シリーズが「規制内容 + 手続き先」の 2 シート構成で統一されているなら、それは シリーズ全体を貫く設計思想の存在を示す。

手法: pandas + openpyxl で xls メタ抽出

11 件の xlsx を pd.ExcelFile で開き、 sheet_names を列挙する。さらに各シートを read_excel(header=None) で ヘッダなし読み込みし、左列の文字パターンから規制種別と市町数を数える。 全 11 件で同じパース手順が動くなら、それ自体が同型性の証拠になる。

実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 11 xls 法令を読み、シート名と「規制内容」項目数・「手続き先」市町数を抽出
import pandas as pd

xls_meta = []
for dsid in [1285, 1286, 1287, 1288, 1291, 1292, 1294, 1295, 1296, 1297, 1298]:
    p = DATA_DIR / f"sample_{dsid}_*.xlsx"  # glob で探す
    x = pd.ExcelFile(p)
    sheets = list(x.sheet_names)

    # シート1「規制内容」: 左列に「・」で始まる行が規制種別
    df_r = pd.read_excel(p, sheet_name=sheets[0], header=None)
    n_rules = sum(1 for v in df_r.iloc[:,0].astype(str)
                  if v.strip().startswith("・"))

    # シート2「手続き先」: 左列に市町名 ("○○市", "○○町") が並ぶ
    df_p = pd.read_excel(p, sheet_name=sheets[1], header=None)
    municipals = {v.strip() for v in df_p.iloc[:,0].astype(str)
                  if (v.endswith("市") or v.endswith("町"))
                     and len(v.strip()) <= 8}

    xls_meta.append({"dsid": dsid, "n_sheets": len(sheets),
                     "n_rules": n_rules, "n_municipals": len(municipals)})
図9: xls 規制手続き層 11 法令 の構造
図9: xls 規制手続き層 11 法令 の構造

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

結果表: 11 xls 法令の構造同型性

dsid法令n_sheetsn_rulesn_municipals同型?
#1285都市計画法21023
#1286広島県砂防指定地管理条例2223
#1287急傾斜地崩壊災害防止法2123
#1288地すべり等防止法2123
#1291県自然環境保全条例・自然海浜保全条例2323
#1292道路法2523
#1294県普通河川等保全条例2123
#1295文化財保護法・県文化財保護条例2323
#1296建設リサイクル法2123
#1297県土砂の適正処理条例2323
#1298土壌汚染対策法2123

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

7. 分析4: 規制空間ジオメトリ 6 法令を読む

狙い: where 層 (geo+csv) 6 法令を読み込み、 それぞれの規模・型 (面/線/点) を実データから把握する。 17 法令のうち地理データを持つのはこの 6 件のみ。

手法: 形式バラバラの 6 ファイルを統一 CRS で読む

関数入力出力意味
gpd.read_file.shp / .geojsonGeoDataFrameジオメトリ + 属性表
g.cx[xmin:xmax, ymin:ymax]BBoxGeoDataFrameBBox フィルタ (高速)
g.to_crs("EPSG:6671")GDFGDFJGD2011 平面直角第III系 (m単位) に再投影
g.geometry.area / 1e6polygonkm²面積 (km²)
g.geometry.length / 1e3linekm線長 (km)
gpd.points_from_xy(lon, lat)2 配列点 GeoSeries緯度経度 → 点

実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 5 geo + 1 csv = 6 法令の規制空間ジオメトリを読み込む
geo = {}

# 1289 森林法保安林: 全国 GeoJSON (国土数値情報 A45-19)
g = load_zip_first_geo(DATA_DIR / "law_1289_55318.zip")
# 全国 1万件 から広島県 BBox でフィルタ (高速化, 要件S)
g = g.cx[132.0:133.5, 34.0:35.2]
g = g.to_crs("EPSG:6671")  # 平面直角に再投影
g["poly_area_km2"] = g.geometry.area / 1e6
geo[1289] = g

# 1290 自然公園 (Shapefile, EPSG:2445), 1293 河川法, 1446 指定道路, 1625 特河川
# それぞれ load_zip_first_geo() で読み, set_crs(2445 or 4326) → to_crs(6671)

# 1311 被爆樹木 (CSV with 経度・緯度)
df = pd.read_csv(DATA_DIR / "sample_1311_50303.csv", encoding="utf-8-sig")
gdf = gpd.GeoDataFrame(df,
    geometry=gpd.points_from_xy(df["経度"], df["緯度"]),
    crs="EPSG:4326").to_crs("EPSG:6671")
geo[1311] = gdf

結果: 6 法令の規制空間ジオメトリ

dsid法令件数合計面積 km²合計長 km備考
#1289森林法 (保安林)9215 1942- 国土数値情報 A45-19 (特定種別の保安林)。広島県内のみ抽出
#1290自然公園198 1321- 国県自然公園 polygon (上位: 瀬戸内海国立公園, 西中国山地国定公園, 比婆道後帝釈国定公園, 神之瀬峡県立自然公園)
#1293河川法 (河川中心線)1761 -2638 一級・二級・準用 河川 = 規制対象河川
#1446建築基準法 指定道路4892 -470 建築基準法上の道路指定範囲
#1625特定都市河川 流域2 864.3- 本川流域 + 上流域 (浸水被害対策法)
#1311被爆樹木89 -- 89 個体 (個別保護対象)

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

図2: 広島県の規制空間 6 法令重ね合わせ
図2: 広島県の規制空間 6 法令重ね合わせ

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

8. 分析5: 県土カバー率と 3 法令 union 支配

狙い: 面ジオメトリを持つ 3 法令 (森林法・自然公園・特定都市河川) について、 広島県土 (7826 km²) に対する面積カバー率を計算する。 H5 (3 法令 union の支配) を検証する。

森林法ジオメトリの限定性: 1289 森林法 GeoJSON は国土数値情報 A45-19 (保安林データ)を そのまま再配布したものであり、特定種別の保安林のみを含む。 広島県の全保安林 (民有林・国有林すべて) ではないため、本記事のカバー率は下限値である点に注意。 完全な保安林被覆を見たい場合は林野庁の保安林公式統計を参照。

実装

L30_law_regulations.py 行 1830–1870

 1
 2
 3
 4
 5
 6
 7
 8
 9
1839
1840
# 県土を background として geo 法令の対県土カバー率を計算
g_admin_pref = load_zip_first_geo(ADMIN_DIR / "admin_922_広島県.zip").to_crs("EPSG:6671")
pref_diss = g_admin_pref.dissolve()
pref_geom = pref_diss.geometry.iloc[0]

# 各 polygon 法令の県土クリップ後面積
for dsid, name in [(1289, "森林法"), (1290, "自然公園"), (1625, "特河川法")]:
    g_in = gpd.clip(geo[dsid], pref_diss)
    a_km2 = g_in.geometry.area.sum() / 1e6
    pct = a_km2 / (pref_geom.area / 1e6) * 100
    print(f"{name}: {a_km2:.1f} km² ({pct:.1f}% 県土)")

結果

法令件数面積 km²対県土
森林法保安林9215 1942.3 24.8%
自然公園198 1320.5 16.9%
特定都市河川 流域2 864.33 11.04%
3 法令 union (合計被覆)- 3595.1 45.9%
図7: 各法令の対県土カバー率と多重度分布
図7: 各法令の対県土カバー率と多重度分布

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

結果表: 3 法令の重畳統計 (面積)

指標面積 km²対県土
森林法 (grid セル)1942.324.82%
自然公園 (grid セル)1320.516.87%
特定都市河川 (grid セル)864.311.04%
森林∩自然公園 (2法令重畳)328.14.19%
森林∩特河 (2法令重畳)189.92.43%
公園∩特河 (2法令重畳)14.00.18%
森∩公園∩特河 (3法令重畳)0.00.0%
3法令 union (≥1 法令)3595.145.93%
規制空白 (0 法令)4231.454.07%

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

9. 分析6: 多重度マップと規制空白地 (面 3 法令)

狙い: 県土を 2 km grid に切り、各セルが面 3 法令 (森林法・自然公園・特定都市河川) それぞれと交わるかを 0/1 値で判定。合計値 (0〜3) を多重度として可視化する。 H4 (重畳と空白) を実データで検証する。

手法: グリッド化 + spatial join

STEP役割入力出力
1県土 BBox を grid に分割pref BBox (m単位)2km × 2km の cell GeoDataFrame
2県土外セルを除外cell + pref polygon県土内 grid のみ
3各法令と sjoin (intersects)cell + 法令 polygoncell × 法令 のヒット 0/1
43 法令ヒット合計 (multi 列)3 列0/1/2/3 値

選定理由 (要件 H): ポリゴン同士の overlay 計算は計算量が大きく、 2 km grid に集約すれば5,000 セル × 3 法令 = 15,000 spatial query で済む。 overlay の数十秒〜数分が grid だと数秒に収まる (要件 S)。

実装

L30_law_regulations.py 行 1908–1963

 1
 2
 3
 4
 5
 6
 7
 8
 9
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
# 県土を 2 km × 2 km grid に切り、各セルが何法令と重なるか集計
from shapely.geometry import box
GRID_SIZE = 2000.0  # m

b = pref_diss.total_bounds
xs = np.arange(b[0], b[2] + GRID_SIZE, GRID_SIZE)
ys = np.arange(b[1], b[3] + GRID_SIZE, GRID_SIZE)
cells = [box(x0, y0, x0 + GRID_SIZE, y0 + GRID_SIZE)
         for x0 in xs[:-1] for y0 in ys[:-1]]
grid = gpd.GeoDataFrame({"cell_id": range(len(cells))},
                         geometry=cells, crs="EPSG:6671")
# 県土外を除外
grid = gpd.sjoin(grid, pref_diss[["geometry"]],
                  how="inner", predicate="intersects")

# 各 grid セルが target_gdf の polygon と重なるか
def hits(grid_gdf, target):
    j = gpd.sjoin(grid_gdf[["cell_id","geometry"]], target[["geometry"]],
                  how="left", predicate="intersects")
    counts = j.groupby("cell_id").size().reindex(grid_gdf["cell_id"]).fillna(0).astype(int)
    return (counts > 0).astype(int).values

grid["hit_forest"] = hits(grid, g_forest_pref)
grid["hit_park"]   = hits(grid, g_park_pref)
grid["hit_toku"]   = hits(grid, g_toku_pref)
grid["multi"]      = grid["hit_forest"] + grid["hit_park"] + grid["hit_toku"]
# multi: 0 (空白), 1, 2, 3 (三重規制ホットスポット)
図3: 多重規制ヒートマップ (面 3 法令: 森林・自然公園・特定都市河川)
図3: 多重規制ヒートマップ (面 3 法令: 森林・自然公園・特定都市河川)

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

図10: ホットスポット (左) と 規制空白地 (右) ── ズーム比較
図10: ホットスポット (左) と 規制空白地 (右) ── ズーム比較

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

10. 分析7: 自然公園 polygon の細分構造

狙い: 自然公園 polygon の細分構造を見る。 1290 自然公園は 公園名・国県フラグ・指定年月日・規制コード・面積 の属性を持ち、 個別の公園を識別できる稀少なジオメトリ。

実装

L30_law_regulations.py 行 1988–1997

1988
1989
1990
1991
# 自然公園 polygon は「公園名」属性を持つ ─ 公園別 small multiples
top_parks = (g_park.groupby("公園名").agg(area=("poly_area_km2","sum"))
              .sort_values("area", ascending=False).head(6).index.tolist())
# 西中国山地国定公園, 比婆道後帝釈国定公園, 瀬戸内海国立公園, ... など主要 6 公園
図4: 自然公園 上位 6 (1290 自然公園 polygon の内訳)
図4: 自然公園 上位 6 (1290 自然公園 polygon の内訳)

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

結果表: 自然公園 上位 8 公園

公園名polygon 数面積 km²
瀬戸内海国立公園1191574.70
西中国山地国定公園38154.25
比婆道後帝釈国定公園1453.80
神之瀬峡県立自然公園927.44
仏通寺御調八幡宮県立自然公園1011.65
南原峡県立自然公園59.10
竹林寺用倉山県立自然公園126.21
三倉岳県立自然公園45.05

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

11. 分析8: 河川法ライン分布 (河川区分別)

狙い: 河川法 (1293) の河川中心線データを河川区分別に分析する。 河川法は管理者・規制適用範囲が一級・二級・準用で異なり、ジオメトリ属性に 河川区分 列があるため、これを使って規制空間を細分する。

実装

L30_law_regulations.py 行 2035–2046

2035
2036
2037
2038
2039
# 河川法 line: 河川区分 (一級/二級/準用) で色分け
g_river_pref = fast_filter_by_pref(geo[1293])
for cls, sub in g_river_pref.groupby("河川区分"):
    print(cls, len(sub), f"{sub.geometry.length.sum()/1e3:.0f} km")
# 一級河川: 約 1000 線, 二級河川: 数百, 準用河川: わずか
図5: 河川法 河川区分別 ラインマップ
図5: 河川法 河川区分別 ラインマップ

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

結果表: 河川法 河川区分別

河川区分線数合計延長 km
一級河川(指定区間)14022158.0
二級河川442636.3

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

12. 分析9: 被爆樹木の爆心地集中 ─ 規制空間の最小例

狙い: 被爆樹木 (1311 csv) の爆心地からの距離分布を可視化する。 17 法令中唯一の点データであり、規制空間の最小スケール (個体ごとの保護対象) を表現する。 爆心地 (1945-08-06 の原爆投下地点 = 広島市中区相生橋上空) からの距離が、 個体保護の指定根拠になっているか?

実装

L30_law_regulations.py 行 2087–2098

2087
2088
2089
2090
2091
# 被爆樹木 全点を爆心地 (132.4536, 34.3955) からの距離で分布調査
hyp = gpd.GeoSeries([gpd.points_from_xy([132.4536],[34.3955])[0]], crs="EPSG:4326").to_crs("EPSG:6671")
g_atree["dist_m"] = g_atree.geometry.distance(hyp.iloc[0])
g_atree["in_1km"] = g_atree["dist_m"] < 1000
print(g_atree["in_1km"].sum(), "/", len(g_atree), "点が 1 km 圏内")
図6: 被爆樹木 89 点 ─ 爆心地周辺 5 km の点分布
図6: 被爆樹木 89 点 ─ 爆心地周辺 5 km の点分布

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

結果表: 距離帯別の被爆樹木数

距離帯本数累積率
0 〜 500 m67%
0 〜 1,000 m2022%
0 〜 1,500 m4348%
0 〜 2,000 m7685%
0 〜 3,000 m89100%
0 〜 5,000 m89100%

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

13. 17 法令総括と仮説検証

狙い: 17 法令を 1 枚のインデックスカードとして総覧し、二層構造を視覚的に確認する。 仮説 H1〜H6 の検証結果を表で総括し、研究問いへの回答を整理する。

図11: 17 法令インデックスカード (色: カテゴリ / 上端帯: 公開形式)
図11: 17 法令インデックスカード (色: カテゴリ / 上端帯: 公開形式)

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

仮説検証総括 (要件 D 完成版)

仮説結果判定
H1_layered_structuregeo+csv 件数=6, xls 件数=11, geo+csv 率=35.3%, 予想=50%未満支持
H2_origin_geo_correlation国法: geo率=4/10 (40%), 県条例: geo率=0/4 (0%)支持
H3_xls_uniformity2シート 件数=11, 総 xls=11支持
H4_multi_overlay三重重畳セル=0, 二重重畳セル=160, 単独規制セル=1004, 規制空白セル=1120部分支持 (3 法令重畳ゼロ, 2 法令重畳と空白は同時に出現)
H5_3laws_union_dominance森林法 対県土=24.8%, 自然公園 対県土=16.9%, 特河川法 対県土=11.04%, 3 法令 union 対県土=45.9%, 予想=3 法令 union 15%以上支持
H6_atree_concentration総点数=89, 1km圏内=20, 2km圏内=76, 1km率=22%, 2km率=85%, 予想=2km圏内に 70%以上支持

研究問いへの回答

14. 発展課題

発展課題 1: xls 11 法令の市町別「○」表をジオメトリ化

発展課題 2: 森林法保安林の細分 (国土数値情報 A45 属性)

発展課題 3: L29 (準都市計画区域) との重畳

発展課題 4: 文化財保護法 (1295) のジオメトリ化

発展課題 5: 二層構造の他都道府県比較