Lesson 30
L30 各種法令の規制情報 17 件統合分析 ── 規制空間 (where) と規制手続き (how) の二層構造
L30geopandas法令規制空間二層構造多重規制森林法保安林自然公園被爆樹木shapefilegeojson
所要 40分 / 想定レベル: リテラシ〜実装 / データ: DoBoX 「各種法令の規制情報」シリーズ 17 件 (#1285〜#1298, #1311, #1446, #1625) + L15 行政区域
データ取得手順
⚠️ このスクリプトは自動取得に対応していません。以下のデータセットを DoBoX から手動でダウンロードし、data/extras/ 以下に保存してください。
| ID | データセット名 |
| #222 | dataset #222 |
| #333 | dataset #333 |
| #444 | dataset #444 |
| #666 | dataset #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)
- 規制空間 (Regulation Space): 法令が空間的に「ここからここまで」と区域を定めて
規制を及ぼす範囲。本記事では where 層 と呼ぶ。GeoJSON / Shapefile / 緯度経度 CSV
で機械可読に提供される場合のみ「規制空間ジオメトリ」と呼ぶ。
Excel 上の市町表のような「○ / ×」表記は規制空間ジオメトリには含めない。
- 規制手続き (Regulation Procedure): 法令が定める許可申請・届出を、どの市町・どの担当課が
受け付けるかを記述した実務情報。本記事では how 層 と呼ぶ。
DoBoX では Excel (xlsx) シート「手続き先」として提供されるのが標準。
- 二層構造 (Two-Layer Structure, 本記事の独自用語):
DoBoX「各種法令の規制情報」シリーズが必ず提供する 2 層:
- where 層 (規制空間ジオメトリ): 一部法令のみ機械可読公開
- how 層 (規制手続きExcel): 全法令で公開 (規制内容 + 手続き先 の 2 シート)
where 層と how 層を独立に整備する設計により、シリーズは形式が統一されない。
本記事ではこの非統一を「二層構造」として正面から扱う。
- 多重規制ホットスポット (Multi-regulation Hotspot):
面 3 法令 (森林法保安林・自然公園・特定都市河川流域) のうち
3 法令すべての規制空間が重なるセル。許認可手続きが多重化する地理的場所。
- 規制空白地 (Regulation Blind Spot):
面 3 法令のどれにも規制空間が及ばないセル。本記事の面 3 法令限定の解釈であり、
他の法令 (砂防指定地・急傾斜地・道路法 etc.) は xls のため空白判定には反映されない
(= 真の意味で「規制を受けない」とは限らない)。
- カテゴリ (Category, 6 分類): 法令の主目的による分類。
防災 / 自然保護 / 土地利用 / 交通・河川 / 環境・廃棄物 / 文化財 の 6 つ。
根拠は法目的条文。複数目的を兼ねる法令 (森林法など) は主目的 1 つで割り切る。
- 制定主体 (Origin): 法令の制定主体による 4 分類:
国法 / 県条例 / 併用 / その他。「併用」は国法 + 県条例の両方を含む統合データ。
「その他」は被爆樹木のような事実情報を整備した法令名なしのデータ。
仮説 H1〜H6 (要件 D)
- H1 (二層構造): 17 件は「where 層 (geo/csv)」と「how 層 (xls)」の 2 層で構成され、
機械可読ジオメトリ提供は少数派 (50%未満)。
- H2 (主体別公開率): 国法由来は地理データを公開する一方、
県条例由来は xls 中心。理由: 国は MLIT/林野庁が GIS 整備済、
県条例は手続き表のみで充足することが多い。
- H3 (xls 構造同型性): 規制手続き Excel 11 件は全件が「規制内容」「手続き先」の
2 シート構成に揃う。シリーズ全体を貫く統一フォーマットの証拠。
- H4 (重畳と空白): ジオメトリを持つ面 3 法令 (forest+park+toku) を県土に重ねると、
3 法令重畳セルまたは2 法令重畳セルと、規制空白セルが同時に出現する。
(※3 法令同時重畳の有無は実測で確認、特定都市河川は新法のため対象が限定的)
- H5 (3 法令 union の支配): 面 polygon を持つ 3 法令 (森林法保安林・自然公園・特定都市河川流域)
の union は単独でも県土の 15%以上をカバーし、ジオメトリ提供の主要層を成す。
- H6 (被爆樹木の集中): 17 件中、点データは 1311 被爆樹木 1 件のみで、
広島市中区の爆心地周辺2 km 圏内に 70% 以上が集中する。
到達点
- 17 法令という異種データセットの寄せ集めを「二層構造」という統一視点で読む技法
- 規制空間ジオメトリの公開状況の不均一さを数値化する手順
- 面 polygon の多重重畳分析を grid 化で行う実装 (sjoin + value_counts)
- カタログメタ (S14) と実データを組み合わせた検証 (S14 では概念図のみだったものを実証)
- 森林法保安林の県土支配性、被爆樹木の爆心地集中など個別法令の幾何特徴を定量化
- 図 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 | 都市計画法 | 都計法 | 土地利用 | 国法 | xls | polygon | DoBoX |
| #1286 | 広島県砂防指定地管理条例 | 砂防条例 | 防災 | 県条例 | xls | polygon | DoBoX |
| #1287 | 急傾斜地崩壊災害防止法 | 急傾斜法 | 防災 | 国法 | xls | polygon | DoBoX |
| #1288 | 地すべり等防止法 | 地すべり法 | 防災 | 国法 | xls | polygon | DoBoX |
| #1289 | 森林法 | 森林法 | 自然保護 | 国法 | geo | polygon | DoBoX |
| #1290 | 自然公園法・県立自然公園条例 | 自然公園 | 自然保護 | 併用 | geo | polygon | DoBoX |
| #1291 | 県自然環境保全条例・自然海浜保全条例 | 自然環境 | 自然保護 | 県条例 | xls | polygon | DoBoX |
| #1292 | 道路法 | 道路法 | 交通・河川 | 国法 | xls | line | DoBoX |
| #1293 | 河川法 | 河川法 | 交通・河川 | 国法 | geo | line | DoBoX |
| #1294 | 県普通河川等保全条例 | 普通河川 | 交通・河川 | 県条例 | xls | line | DoBoX |
| #1295 | 文化財保護法・県文化財保護条例 | 文化財 | 文化財 | 併用 | xls | point/area | DoBoX |
| #1296 | 建設リサイクル法 | リサイクル | 環境・廃棄物 | 国法 | xls | non-spatial | DoBoX |
| #1297 | 県土砂の適正処理条例 | 土砂条例 | 環境・廃棄物 | 県条例 | xls | non-spatial | DoBoX |
| #1298 | 土壌汚染対策法 | 土壌汚染 | 環境・廃棄物 | 国法 | xls | non-spatial | DoBoX |
| #1311 | 被爆樹木基本情報 | 被爆樹木 | 文化財 | その他 | csv | point | DoBoX |
| #1446 | 建築基準法(指定道路図) | 指定道路 | 土地利用 | 国法 | geo | line | DoBoX |
| #1625 | 特定都市河川浸水被害対策法 | 特河川法 | 防災 | 国法 | geo | polygon | DoBoX |
二層構造の集計
| 項目 | 値 |
| 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 | 森林法 | polygon | 10645 | 421.678 | nan | nan |
| #1290 | 自然公園法・県立自然公園条例 | polygon | 220 | 1845.728 | nan | nan |
| #1293 | 河川法 | line | 1888 | nan | 2850.551 | nan |
| #1311 | 被爆樹木基本情報 | point | 89 | nan | nan | 89.0 |
| #1446 | 建築基準法(指定道路図) | line | 4892 | nan | 470.173 | nan |
| #1625 | 特定都市河川浸水被害対策法 | polygon | 2 | 669.104 | nan | nan |
how 層 (xls 11 法令) のシート構造
| dsid | 法令 | シート数 | シート名 |
規制種別数 | 市町数 |
| #1285 | 都市計画法 | 2 | 規制内容; 手続き先 | 10 | 23 |
| #1286 | 広島県砂防指定地管理条例 | 2 | 規制内容; 手続き先 | 2 | 23 |
| #1287 | 急傾斜地崩壊災害防止法 | 2 | 規制内容; 手続き先 | 1 | 23 |
| #1288 | 地すべり等防止法 | 2 | 規制内容; 手続き先 | 1 | 23 |
| #1291 | 県自然環境保全条例・自然海浜保全条例 | 2 | 規制内容; 手続き先 | 3 | 23 |
| #1292 | 道路法 | 2 | 規制内容; 手続き先 | 5 | 23 |
| #1294 | 県普通河川等保全条例 | 2 | 規制内容; 手続き先 | 1 | 23 |
| #1295 | 文化財保護法・県文化財保護条例 | 2 | 規制内容; 手続き先 | 3 | 23 |
| #1296 | 建設リサイクル法 | 2 | 規制内容; 手続き先 | 1 | 23 |
| #1297 | 県土砂の適正処理条例 | 2 | 規制内容; 手続き先 | 3 | 23 |
| #1298 | 土壌汚染対策法 | 2 | 規制内容; 手続き先 | 1 | 23 |
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 から読み取れること:
- (左) xls が 11/17 = 65% と過半数。geo + csv の機械可読ジオメトリは 6/17 = 35% にとどまる。
- (右) 自然保護カテゴリは geo 提供が多く (2 / 3 = 67%)、
環境・廃棄物は xls のみ。
- 仮説 H1 (二層構造、geo+csv 50%未満) → 支持: 実測 35% < 50%。
結果表: format 別 17 法令内訳
| 形式 | 件数 | 比率 | 意味 |
geo | 5 | 29% |
GeoJSON / Shapefile (面・線) |
csv | 1 | 6% |
緯度経度を含む点表 |
xls | 11 | 65% |
2 シート構成の Excel (ジオメトリなし) |
この表から読み取れること:
- 過半数 (65%) が xls = how 層のみで、where 層は提供しない。
- シリーズ名の「規制情報」は"地理データ" を意味しない。むしろ「規制内容 + 手続き先」のペアが本体。
- こうした「整備状況のばらつき」は、オープンデータ研究において見過ごせない論点。
5. 分析2: 制定主体と公開形式の相関
狙い: 「国法は地理データを公開する、県条例は手続き表のみ」という仮説 (H2) を、
17 法令の origin × format クロス集計で検証する。
仮説の根拠
国土交通省・林野庁・環境省は、国土数値情報として全国一律のレイヤを公開する仕組みを持つ。
森林法保安林は林野庁、自然公園は環境省 + 県庁、河川法は MLIT、特定都市河川も MLIT が GIS 整備済。
一方、県条例 (砂防指定地条例・自然海浜保全条例・普通河川保全条例 etc.) は県独自の整備に依存し、
ジオメトリ整備が進みにくい。
実装
↑ L30_law_regulations.py 行 1594–1603
| # 制定主体 × 形式 のクロス
crossOF = pd.crosstab(laws_df["origin"], laws_df["format"])
# 国法 12 件 (うち geo 4)、県条例 4 件 (うち geo 0)、併用 2 件 (うち geo 1)
# → 国法は geo 公開率が高く、県条例は xls のみ という傾向
|
図8 から読み取れること:
- (左) 国法 12 件のうち 4 件 (40%) が geo。
対して 県条例 4 件のうち geo は 0 件 (0%)。
- 仮説 H2 → 支持: 制定主体と地理データ公開率に強い正相関。
- (右) カテゴリ別では 自然保護 (森林・自然公園) が geo 比率最高、
環境・廃棄物 (リサイクル・土砂条例・土壌汚染) はすべて xls ─ 行為規制のため空間提供不要。
結果表: origin × format
| origin | geo | csv | xls | 計 | geo率 |
| 国法 | 4 | 0 | 6 | 10 | 40% |
| 県条例 | 0 | 0 | 4 | 4 | 0% |
| 併用 | 1 | 0 | 1 | 2 | 50% |
| その他 | 0 | 1 | 0 | 1 | 0% |
この表から読み取れること:
- 「国法 = geo 公開率高、県条例 = xls 中心」という偏りは数値で確認できる。
- 「併用」(国法+県条例) は 2 件のみで、自然公園 (geo) と文化財 (xls) に分かれる ─ 統合データだから自動的に geo になるとは限らない。
- 「その他」(被爆樹木) は法令名なしの事実情報整備で、独自に csv 公開されている。
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 から読み取れること:
- (左) 11/11 件 (100%) が 2 シート構成。
ただし河川法 (1293) のみ4 シート (河川区分別に手続き先を分割)。
- (右) 規制種別数のばらつき: 急傾斜法 (1287)・地すべり法 (1288)・普通河川条例 (1294)・
文化財保護法 (1295) は1〜2 種別と少ない一方、都市計画法 (1285) は4 種以上。
法令の複雑度をそのまま反映。
- 仮説 H3 → 部分支持: 大半は 2 シート同型だが、河川法だけ 4 シート版。
理由は「河川区分 (一級/二級/準用) で手続き先窓口が変わる」ため、シリーズ設計上の例外。
結果表: 11 xls 法令の構造同型性
| dsid | 法令 | n_sheets | n_rules | n_municipals | 同型? |
| #1285 | 都市計画法 | 2 | 10 | 23 | ○ |
| #1286 | 広島県砂防指定地管理条例 | 2 | 2 | 23 | ○ |
| #1287 | 急傾斜地崩壊災害防止法 | 2 | 1 | 23 | ○ |
| #1288 | 地すべり等防止法 | 2 | 1 | 23 | ○ |
| #1291 | 県自然環境保全条例・自然海浜保全条例 | 2 | 3 | 23 | ○ |
| #1292 | 道路法 | 2 | 5 | 23 | ○ |
| #1294 | 県普通河川等保全条例 | 2 | 1 | 23 | ○ |
| #1295 | 文化財保護法・県文化財保護条例 | 2 | 3 | 23 | ○ |
| #1296 | 建設リサイクル法 | 2 | 1 | 23 | ○ |
| #1297 | 県土砂の適正処理条例 | 2 | 3 | 23 | ○ |
| #1298 | 土壌汚染対策法 | 2 | 1 | 23 | ○ |
この表から読み取れること:
- 10/11 件が 2 シート同型。河川法 (1293) だけが 4 シートに分かれる例外。
- 規制種別数 (n_rules) は 1〜4 と法令の複雑度に応じる。
- 市町数 (n_municipals) は手続き先窓口の網羅度を表し、20〜23 (≒ 県内 23 市町) を満たすものが多い。
これはシリーズが「全市町への適用を考慮した手続き表」を整備した証拠。
7. 分析4: 規制空間ジオメトリ 6 法令を読む
狙い: where 層 (geo+csv) 6 法令を読み込み、
それぞれの規模・型 (面/線/点) を実データから把握する。
17 法令のうち地理データを持つのはこの 6 件のみ。
手法: 形式バラバラの 6 ファイルを統一 CRS で読む
| 関数 | 入力 | 出力 | 意味 |
gpd.read_file | .shp / .geojson | GeoDataFrame | ジオメトリ + 属性表 |
g.cx[xmin:xmax, ymin:ymax] | BBox | GeoDataFrame | BBox フィルタ (高速) |
g.to_crs("EPSG:6671") | GDF | GDF | JGD2011 平面直角第III系 (m単位) に再投影 |
g.geometry.area / 1e6 | polygon | km² | 面積 (km²) |
g.geometry.length / 1e3 | line | km | 線長 (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 個体 (個別保護対象) |
この表から読み取れること:
- 17 法令中、ジオメトリを持つのは 6 法令だけ ─ それ以外の 11 法令は規制空間が「数字 + 文字」のみで提供される。
- 森林法保安林の面積 (1942 km²) は他法令を圧倒する規模。
- 線データ (河川法 + 指定道路) は polygon と直接重畳できないので、
多重規制分析では面 3 法令だけを使う (次セクション)。
- 被爆樹木は点で、規制空間としては「個体ごとの保護」 = 規制空間の最小実装。
図2 から読み取れること:
- 緑 (森林法保安林) が県土の中山間部を広く覆い、面 3 法令 union を支配する。
- 黄 (自然公園) は北部の中国山地と南部の島嶼部に集中。
- 赤 (特定都市河川) は2 polygon のみでごく狭い (1625 は新設法令で対象が限定)。
- 青線 (河川法) と灰線 (指定道路) は線レイヤとして全県を網羅。
- 橙点 (被爆樹木) は広島市中区の 1 点に集中 → 図6 で詳細。
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 から読み取れること:
- (左) 自然公園が県土の 17%、森林法保安林が 25%、
特定都市河川が 11.04% (新法のため対象限定)。
- 3 法令 union は45.9% ─ 仮説 H5 (15%以上) → 支持。
- (右) 県土 grid セルの重畳分布: 単独規制 (1 法令) のセルが大半を占め、
三重重畳セルは 0 (0.0%) と希少。
結果表: 3 法令の重畳統計 (面積)
| 指標 | 面積 km² | 対県土 |
|---|
| 森林法 (grid セル) | 1942.3 | 24.82% |
| 自然公園 (grid セル) | 1320.5 | 16.87% |
| 特定都市河川 (grid セル) | 864.3 | 11.04% |
| 森林∩自然公園 (2法令重畳) | 328.1 | 4.19% |
| 森林∩特河 (2法令重畳) | 189.9 | 2.43% |
| 公園∩特河 (2法令重畳) | 14.0 | 0.18% |
| 森∩公園∩特河 (3法令重畳) | 0.0 | 0.0% |
| 3法令 union (≥1 法令) | 3595.1 | 45.93% |
| 規制空白 (0 法令) | 4231.4 | 54.07% |
この表から読み取れること:
- 3 法令 union の対県土被覆は 45.9%。
残り 54.1% は面 3 法令の規制空間外。
- 森林法 ∩ 自然公園 が最大の重畳カテゴリ (328 km²) ─ 国県自然公園が森林域に多く設定されているため。
- 森林∩公園∩特河 (3 法令同時重畳) は0.000 km² = ほぼゼロ。
特定都市河川流域と森林・自然公園が重なる場所はほぼ無い。
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 + 法令 polygon | cell × 法令 のヒット 0/1 |
| 4 | 3 法令ヒット合計 (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 から読み取れること:
- 北部・中央山地の緑〜橙セルが多く、森林法 + 自然公園で多重化 (二重規制セル 160)。
- 赤 (3 法令重畳) のセルは0 ─ 特定都市河川流域 (新法、対象限定) は
他 2 法令と地理的に独立しており、3 法令同時重畳は出現しない。
- 南部沿岸・平野部 (広島市・福山市・尾道市) は灰 (空白セル 1120) ─
面 3 法令はあまり及ばない。ただし xls 法令 (都市計画法・道路法 etc.) が別途規制を及ぼす。
- 仮説 H4 → 部分支持: 二重重畳セルと空白セルは同時に存在 (3 法令重畳は実測ゼロ)。
図10 から読み取れること:
- (左) 三重重畳セルが 0 のため、左パネルでは hatch 描画されないが、
多重規制 (2 法令以上重畳) は中山間部に集中する。
- (右) 規制空白地は南部都市部に広がる ─ ただし都市計画法・道路法・建築基準法など xls 法令が
別途規制を及ぼしており、真の意味で「無規制」ではない。
- 本記事の「空白」定義は面 3 法令限定 ─ より厳密な空白判定には残り 14 法令の地理化が必要。
10. 分析7: 自然公園 polygon の細分構造
狙い: 自然公園 polygon の細分構造を見る。
1290 自然公園は 公園名・国県フラグ・指定年月日・規制コード・面積 の属性を持ち、
個別の公園を識別できる稀少なジオメトリ。
実装
↑ L30_law_regulations.py 行 1988–1997
| # 自然公園 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 公園で全体の大部分を占める。
- 国定公園 (国法) は大規模な連続塊、県立自然公園 (県条例) は小規模で散らばる。
- 島嶼部 (瀬戸内海国立公園) は polygon が島ごとに分割。
結果表: 自然公園 上位 8 公園
| 公園名 | polygon 数 | 面積 km² |
| 瀬戸内海国立公園 | 119 | 1574.70 |
| 西中国山地国定公園 | 38 | 154.25 |
| 比婆道後帝釈国定公園 | 14 | 53.80 |
| 神之瀬峡県立自然公園 | 9 | 27.44 |
| 仏通寺御調八幡宮県立自然公園 | 10 | 11.65 |
| 南原峡県立自然公園 | 5 | 9.10 |
| 竹林寺用倉山県立自然公園 | 12 | 6.21 |
| 三倉岳県立自然公園 | 4 | 5.05 |
この表から読み取れること:
- polygon 数 ≠ 公園数。1 公園が複数 polygon (島嶼や飛地) で構成されることがある。
- 「西中国山地国定公園」は最大級の保護区域 ─ 中国山地の自然林を網羅。
11. 分析8: 河川法ライン分布 (河川区分別)
狙い: 河川法 (1293) の河川中心線データを河川区分別に分析する。
河川法は管理者・規制適用範囲が一級・二級・準用で異なり、ジオメトリ属性に
河川区分 列があるため、これを使って規制空間を細分する。
実装
↑ L30_law_regulations.py 行 2035–2046
| # 河川法 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 から読み取れること:
- 青 (一級河川) が最も網羅的で県内の主要水系を構成。
- 緑 (二級河川) は中小規模流域。準用・普通河川は補完的。
- 河川法の規制対象は線そのものではなく、線の周囲一定距離 (河川区域) で
面的に作用するため、本ジオメトリは規制空間の中心線指示と読む。
結果表: 河川法 河川区分別
| 河川区分 | 線数 | 合計延長 km |
| 一級河川(指定区間) | 1402 | 2158.0 |
| 二級河川 | 442 | 636.3 |
この表から読み取れること:
- 一級・二級・準用・普通 で管理体系が変わるため、許認可手続きも変わる (河川法 xls の 4 シートの根拠)。
- 河川法 line データは規制空間の線型表現であり、面 3 法令 (forest+park+toku) とは
重畳分析の単位が違うため、別途扱う。
12. 分析9: 被爆樹木の爆心地集中 ─ 規制空間の最小例
狙い: 被爆樹木 (1311 csv) の爆心地からの距離分布を可視化する。
17 法令中唯一の点データであり、規制空間の最小スケール (個体ごとの保護対象) を表現する。
爆心地 (1945-08-06 の原爆投下地点 = 広島市中区相生橋上空) からの距離が、
個体保護の指定根拠になっているか?
実装
↑ L30_law_regulations.py 行 2087–2098
| # 被爆樹木 全点を爆心地 (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 点中 20 点 (22%) が爆心地 1 km 圏内に集中。
- 2 km 圏内が 76 点 (85%)。
= 被爆樹木は原爆熱線・爆風に耐えた個体を「被爆当時の場所で生き残った」基準で同定しているため、
爆心地に近接するほど密度が高い。
- 外周 (3〜5 km) には散在する個体のみ。これらは爆心から遠かったが熱線で損傷を受けた個体。
- 仮説 H6 → 部分支持:
1 km 率 22% (予想 80%以上)。
結果表: 距離帯別の被爆樹木数
| 距離帯 | 本数 | 累積率 |
| 0 〜 500 m | 6 | 7% |
| 0 〜 1,000 m | 20 | 22% |
| 0 〜 1,500 m | 43 | 48% |
| 0 〜 2,000 m | 76 | 85% |
| 0 〜 3,000 m | 89 | 100% |
| 0 〜 5,000 m | 89 | 100% |
この表から読み取れること:
- 距離 0.5 km から急速に立ち上がり、2 km でほぼ飽和。被爆樹木は爆心地と強く相関。
- これは「規制空間ジオメトリ = 規制対象の現実分布」という意味で、
他のような行政的境界 (= 役所が線を引いた) とは性格が違う。
- 被爆樹木は文化財保護法 + 各種記憶継承法令で個別保護され、
個体 = 規制単位という最小スケールを取る。
13. 17 法令総括と仮説検証
狙い: 17 法令を 1 枚のインデックスカードとして総覧し、二層構造を視覚的に確認する。
仮説 H1〜H6 の検証結果を表で総括し、研究問いへの回答を整理する。
図11 から読み取れること:
- 17 法令を 6 カテゴリ (色) × 3 形式 (上端帯) で総覧。視覚的に「format がカテゴリで偏る」が確認できる。
- 自然保護 (緑色): 全 3 件とも geo (上端緑帯) ─ 自然公園・森林・自然環境がそれぞれ別 polygon を持つ。
- 環境・廃棄物 (茶色): 全 3 件とも xls (上端灰帯) ─ 行為規制のため空間提供不要。
- 文化財 (黄色): 1 件 csv (被爆樹木) + 1 件 xls (文化財保護法) ─ 二層構造の対比。
仮説検証総括 (要件 D 完成版)
| 仮説 | 結果 | 判定 |
H1_layered_structure | geo+csv 件数=6, xls 件数=11, geo+csv 率=35.3%, 予想=50%未満 | 支持 |
H2_origin_geo_correlation | 国法: geo率=4/10 (40%), 県条例: geo率=0/4 (0%) | 支持 |
H3_xls_uniformity | 2シート 件数=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%以上 | 支持 |
研究問いへの回答
- RQ-1 (geo 公開状況): 17 法令中 6 件 (35%) のみが
機械可読ジオメトリ提供。型は面 4 件 (森林・自然公園・特河流域)、
線 2 件 (河川法・指定道路)、点 1 件 (被爆樹木)。
残り 11 件は xls 手続き表のみ。
- RQ-2 (xls 同型性): 10/11 件 = 91% が「規制内容 + 手続き先」の 2 シート構成で同型。
唯一の例外は河川法 (4 シート構成、河川区分で窓口が変わるため)。
市町数は 20〜23 で県内 23 市町を網羅。
- RQ-3 (重畳と空白): 面 3 法令 (forest+park+toku) を 2 km grid に集約すると、
三重重畳ホットスポット 0 セル (同時 3 法令重畳は出現しない),
二重重畳セル 160, 単独規制セル 1004,
規制空白セル 1120。
合計被覆 (≥1 法令) は県土の 46%、空白は 54%。
重畳は森林∩自然公園が中心 (328 km²)、特定都市河川流域は他 2 法令と独立した位置に配置されているため
三重重畳が現れない。空白は南部都市部・平野部に集中。
14. 発展課題
発展課題 1: xls 11 法令の市町別「○」表をジオメトリ化
- 結果X: xls 法令の
手続き先 シートには「広島市 ○、府中町 ○、…」のような
市町別「○」表があり、市町×規制種別 のクロスを示している。
- 新仮説Y: この「○」表を市町行政界 (L15 admin polygons) に空間結合すると、
11 法令分のwhere 層 を疑似復元できる。
- 課題Z:
pd.read_excel で「○」表をパース → L15 admin polygon と
merge → 11 法令分 polygon を生成 → 図3 と同じ多重度マップを作り直す。
これにより「真の規制空白地」が大幅に縮小するはず ─ 検証すれば本記事の限界 (面 3 法令限定) を超えられる。
発展課題 2: 森林法保安林の細分 (国土数値情報 A45 属性)
- 結果X: 森林法保安林 (1289) の GeoJSON は
A45_001〜A45_008 という暗号的列を持つ。
実は保安林種別コード ─ 水源涵養林・土砂流出防備林・防風林・潮害防備林など 17 種別を区別。
- 新仮説Y: 保安林種別ごとに地理分布が違うはず。水源涵養林は中山間部、
潮害防備林は沿岸部、防風林は山地と平野の境界にあるなど。
- 課題Z: 国土数値情報 A45 仕様書 (国土地理院公開) を参照して列名を解読 →
種別ごとに choropleth マップを描く → カテゴリ別カバー率を比較。
発展課題 3: L29 (準都市計画区域) との重畳
- 結果X: 本記事の面 3 法令と L29 (準都市計画区域 4.58 km²) はどちらも空間制約を加える。
- 新仮説Y: 準都市計画区域が指定された旧湯来町は、森林法保安林にも自然公園にも入っているはず ─
そうでなければ「準都市計画」という緩い制度を使う必要がない (もっと強い制度で守るはず)。
- 課題Z: L29 の base polygon と本記事の forest_pref / park_pref を
gpd.overlay で交差 →
重なり面積を計算 → 仮説の真偽を判定。重なっていれば「制度の重ね着き」、
重なっていなければ「制度の境界線」が見える。
発展課題 4: 文化財保護法 (1295) のジオメトリ化
- 結果X: 1295 文化財保護法は xls のみで地理データを提供しない。
しかし広島県には埋蔵文化財包蔵地のジオメトリが別シリーズで提供されている (S15)。
- 新仮説Y: 文化財保護法の規制空間 = 埋蔵文化財包蔵地 polygon と同じはず。
ただし「現状変更が制限される史跡名勝天然記念物」が別途あるため、完全一致しない可能性も。
- 課題Z: S15 シリーズを取り込み、本記事の二層構造マップに追加する → 文化財カテゴリの
where 層を完成させる。
発展課題 5: 二層構造の他都道府県比較
- 結果X: 広島県は 17 法令を 2 シート xls + 一部 geo で公開。
- 新仮説Y: 他都道府県のオープンデータポータルでも同じ「二層構造」が見られるか?
地理データ整備率は都道府県によって違うはず。
- 課題Z: 東京都・大阪府・北海道のオープンデータカタログを比較し、
「各種法令の規制情報」相当シリーズが存在するか・geo 比率はいくらかを定量化する。
これが日本のオープンデータ整備の地域格差研究につながる。