⚠️ このスクリプトは自動取得に対応していません。以下のデータセットを DoBoX から手動でダウンロードし、data/extras/ 以下に保存してください。
| ID | データセット名 |
|---|---|
| #48 | 土砂災害警戒区域・特別警戒区域情報_広島県 |
| #71 | 都市計画区域情報_建物利用現況_海田町 |
| #544 | 土砂災害警戒区域・特別警戒区域情報_広島市中区 |
| #573 | 土砂災害警戒区域・特別警戒区域情報_神石高原町 |
| #888 | 都市計画区域情報_区域データ_安芸高田市_行政区域 |
| #999 | dataset #999 |
実行コマンド:
cd "2026 DoBoX 教材"
python -X utf8 lessons/L10_sediment_disaster_cross.py
DoBoX のオープンデータは申請不要・商用/非商用とも利用可。
data/extras/ は .gitignore 対象(約 57 GB のキャッシュ)。
スクリプト実行で自動再生成されます。
geopandas.overlay() で 用途地域との交差面積、gpd.sjoin(predicate='within')
で 避難所/インフラ/文化財の警戒区域内立地を一気に判定する。
city 列でフィルタすれば 31 dataset_id 全部の内容を再現可能。
対応表 31/31 件 論理カバー。
gpd.overlay)本記事を読み終わった学習者は、土砂災害警戒区域 Shapefile を使って、 用途地域・避難所・インフラ・文化財・河川浸水 という多面の DoBoX レイヤと クロスし、「山際リスク」を多角的に可視化できるようになる。
| 指標 | 結果 |
|---|---|
| 3 種別合計 警戒区域 件数 (全県) | 49069 件 |
| 3 種別合計 特別警戒区域 件数 | 43093 件 |
| 避難所 警戒区域内 件数 / 全件 | 855/4065 (21.0%) |
| 避難所 特別警戒区域内 件数 | 54 件 |
| 用途別 警戒立地率 1位 | 第二種中高層住居専用 (47.27%) |
| 用途別 特別警戒立地率 1位 | 第一種中高層住居専用 (6.13%) |
| 致命的二重ハザード合計面積 | 448.9 ha |
data/extras/sediment_shp/data/extras/landuse_extracted/data/shelters.jsondata/extras/{bridge,tunnel,dam,tameike}_basic.csvdata/extras/burial_*.csvdata/extras/flood_shp/shinsui_souteisaidai.shp本記事 1 本で論理的に再現可能な dataset_id:
city 列で全県版から再現可能計 31 件カバー。残る派生レイヤ (避難所/橋/etc) は本記事の使用データ欄を参照。
| ファイル | 内容 |
|---|---|
| L10_overview.csv | 点要素 7 種別 立地率まとめ |
| L10_yoto_kind_pivot.csv | 用途×災害種別 ピボット |
| L10_yoto_rate.csv | 用途別 立地率 (警戒/特別警戒) |
| L10_double_risk_bridges.csv | 老朽×警戒 二重リスク橋一覧 |
| L10_flood_sediment_overlap.csv | 浸水×特別警戒 種別別重複 |
| L10_kind_count.csv | 種別×レベル 件数 |
| L10_castle_era.csv | 城跡時代別立地率 |
| L10_muni_shelter.csv | 市町別避難所×警戒 |
| L10_map_kind_overlay.png | 図1 主題図 3種災害色分け |
| L10_yoto_kind_heatmap.png | 図2 用途×災害種別 ヒートマップ |
| L10_yoto_rate_bar.png | 図3 用途別 立地率 棒グラフ |
| L10_kind_small_multiples.png | 図4 災害種別 small multiples |
| L10_kind_count_bar.png | 図5 種別×レベル 件数 |
| L10_point_rate.png | 図6 点要素 立地率 |
| L10_double_risk_bridges.png | 図7 二重リスク橋 上位 20 |
| L10_flood_sediment_overlap.png | 図8 浸水×特別警戒 重複 |
| L10_castle_era.png | 図9 城跡 時代別 立地率 |
| L10_muni_shelter.png | 図10 市町別 警戒避難所 |
| L10_shelter_pointmap.png | 図11 警戒区域内 避難所 点マップ |
| L10_sediment_disaster_cross.py | 再現スクリプト |
cd "2026 DoBoX 教材"
mkdir data\extras\sediment_shp -Force
iwr "https://hiroshima-dobox.jp/resource_download/79" -OutFile "data\extras\sediment_shp\doseki.zip" # 土石流
iwr "https://hiroshima-dobox.jp/resource_download/80" -OutFile "data\extras\sediment_shp\kyukeisha.zip" # 急傾斜地
iwr "https://hiroshima-dobox.jp/resource_download/81" -OutFile "data\extras\sediment_shp\jisuberi.zip" # 地すべり
Expand-Archive data\extras\sediment_shp\doseki.zip data\extras\sediment_shp\doseki -Force
Expand-Archive data\extras\sediment_shp\kyukeisha.zip data\extras\sediment_shp\kyukeisha -Force
Expand-Archive data\extras\sediment_shp\jisuberi.zip data\extras\sediment_shp\jisuberi -Force
まず 「広島市のどこに、どの種類の警戒区域が広がっているか」 を 1 枚の地図で見る。 用途地域を背景グレーに、3 災害種別を 3 色で、警戒/特別警戒を濃淡で表現する。
plt.Axes に順に重ねるsed_diss = (kind, level) で dissolve 済み (各 1 ポリゴン)。プロットが高速cx[bbox] で広島市範囲だけ切り出して描画↑ L10_sediment_disaster_cross.py 行 1066–1079

なぜこの図か (要件H): ヒートマップ (図2) では「用途×種別」の値分布は分かるが 「どこに集中するか」 は地図でしか分からない。地理的偏りを掴むため最初に地図を置く。
読み取り (要件F):
「どの用途が、どの災害種別にどれくらい重なるか」を 用途×(種別×レベル) マトリクスで把握する。
gpd.overlay() は 2 つの GeoDataFrame の 交差ポリゴンを計算する ツール。
内部では R-tree 空間インデックスで候補を絞り、shapely の Boolean intersection が走るが、
利用者は「2 レイヤ → 交差ポリゴンの GeoDataFrame」とだけ覚えれば良い (黒箱化)。
| 関数 | 入力 | 出力 |
|---|---|---|
gpd.overlay(A, B, how='intersection') | 2 GeoDataFrame | 交差ポリゴン (両方の属性を保持) |
gdf.dissolve(by='col') | 1 GeoDataFrame + キー列 | キー単位で union された GeoDataFrame |
gdf.geometry.buffer(0) | 1 GeoDataFrame | 微小なトポロジ崩れを修正 |
gdf.to_crs('EPSG:6671') | 1 GeoDataFrame | 面積を m² で正確に計算できる座標系へ |
↑ L10_sediment_disaster_cross.py 行 1106–1119

なぜこの図か: 2 軸の値分布 (用途 13 × 種別×レベル 5) を 1 枚で見るのにヒートマップが最適。
読み取り:
| 用途 | 総面積(ha) | 警戒重なり(ha) | 警戒率% | 特別警戒(ha) | 特別警戒率% |
|---|---|---|---|---|---|
| 第二種中高層住居専用 | 1371 | 648.3 | 47.27 | 71.7 | 5.23 |
| 第一種低層住居専用 | 3646 | 1650.6 | 45.27 | 166.5 | 4.57 |
| 第一種中高層住居専用 | 806 | 293.8 | 36.47 | 49.4 | 6.13 |
| 第一種住居 | 4673 | 1058.0 | 22.64 | 84.2 | 1.80 |
| 準住居 | 68 | 11.9 | 17.70 | 1.0 | 1.55 |
| 第二種住居 | 1074 | 140.2 | 13.05 | 28.0 | 2.61 |
| 第二種低層住居専用 | 32 | 3.1 | 9.51 | 0.2 | 0.69 |
| 工業専用 | 742 | 54.8 | 7.39 | 5.5 | 0.74 |
| 工業 | 1433 | 81.1 | 5.66 | 6.9 | 0.48 |
| 商業 | 1366 | 60.7 | 4.44 | 5.1 | 0.38 |
| 準工業 | 704 | 1.4 | 0.20 | 0.3 | 0.04 |
| 田園住居 | 300 | 0.0 | 0.00 | 0.0 | 0.00 |
表からの読み取り:
絶対面積では「広い用途ほど警戒重なりが大きい」のは当たり前。これを 立地率 (=警戒重なり / 用途総面積) で正規化することで 密度視点のリスク が見える。
↑ L10_sediment_disaster_cross.py 行 1143–1146
1143 1144 |

なぜこの図か: 立地率は密度指標。横棒グラフは比較に最も読み取りやすい。 警戒/特別警戒を 2 本並列にすることで、各用途の「リスクの濃さ」が見える。
読み取り:
図1 の重ね合わせ地図では「種別ごとの形状の違い」が見えにくい。 条件 (種別) だけ変えて並べる small multiples で 3 種類のメカニズムを比較する。

なぜこの図か: 1 枚に重ねると alpha blending で背面が見えなくなる。 small multiples なら同スケールで 3 枚の地図を直接比較できる。
読み取り:
3 災害種別 × 2 レベル の 絶対件数 を可視化。H4 (特別警戒は急傾斜地が大半) を検証する。

| 災害種別 | 警戒 | 特別警戒 | 合計 |
|---|---|---|---|
| 土石流 | 18,083 | 13,337 | 31,420 |
| 急傾斜地 | 30,859 | 29,756 | 60,615 |
| 地すべり | 127 | 0 | 127 |
| 合計 | 49,069 | 43,093 | 92,162 |
表からの読み取り:
避難所・インフラ 4 種・文化財 2 種 の合計 7 種類の点 を、警戒区域に対して
一気に 点 in ポリゴン判定 する。geopandas.sjoin の真骨頂。
gpd.sjoin(points, polygons, predicate='within') は
点ごとに「ポリゴンの内側か」を R-tree 空間インデックスで高速判定する。
内部実装は知らなくて良い。「点 + 面 → 点に面の属性が付く」 とだけ覚える。
| 関数 | 入力 | 出力 |
|---|---|---|
gpd.sjoin(P, Q, how='left', predicate='within') | 点GDF + 面GDF | 点GDF + 面の属性を含んだ DataFrame |
| 段階 | このデータで何が起きるか | サイズ |
|---|---|---|
| ① 生 JSON | {name:"○○小学校", lat:34.4, lon:132.4, ...} | 1 dict |
| ② DataFrame 化 | 1 行, 列 36 個 | 1×36 |
| ③ 経緯度 GeoDataFrame | geometry = Point(132.4, 34.4) 列追加, CRS=EPSG:4326 | 1×37 |
④ to_crs(EPSG:6671) | geometry が m 単位に変換, X≒-37000, Y≒180000 | 1×37 |
⑤ sjoin(sed_diss, predicate='within') | R-tree で候補面を 60K → 数個に絞り、shapely contains で確定。{level: "警戒", kind: "急傾斜地"} が右からマージ | 1×40 |
| ⑥ groupby('_pid') 集約 | 複数面に重なれば 特別警戒を優先 し 1 行に | 1×4 (in_warn, in_spec, kinds, first_kind) |
↑ L10_sediment_disaster_cross.py 行 1222–1245

| 種別 | 件数 | 警戒内 | 警戒率% | 特別警戒内 | 特別警戒率% |
|---|---|---|---|---|---|
| 避難所 | 4,065 | 855 | 21.0 | 54 | 1.3 |
| 橋梁 | 4,199 | 896 | 21.3 | 184 | 4.4 |
| トンネル | 155 | 14 | 9.0 | 7 | 4.5 |
| ダム | 12 | 0 | 0.0 | 0 | 0.0 |
| ため池 | 6,754 | 1,779 | 26.3 | 257 | 3.8 |
| 城跡・官衙 | 13 | 4 | 30.8 | 0 | 0.0 |
| 埋蔵文化財 | 190 | 26 | 13.7 | 6 | 3.2 |
表+図の読み取り:

点マップ読み取り:
L07 で発見した「老朽橋 × 浸水域」の二重リスク手法を、警戒区域 に適用する。 1980 年以前架設の橋 かつ 警戒区域内 = 土砂崩れで落橋しうる老朽橋。

| 橋名 | 架設年 | 橋齢 | 市町 | 災害種別 | 特別警戒? |
|---|---|---|---|---|---|
| 後谷橋 | 1910 | 116 | 庄原市 | 土石流 | − |
| 潮見橋 | 1925 | 101 | 海田町 | 土石流 | − |
| 釣士田上橋 | 1927 | 99 | 呉市 | 土石流 | − |
| 桑畠橋 | 1927 | 99 | 廿日市市 | 土石流 | − |
| 上岩倉橋 | 1927 | 99 | 廿日市市 | 土石流 | − |
| 四通橋 | 1927 | 99 | 庄原市 | 土石流 | ● |
| 上中村橋 | 1927 | 99 | 廿日市市 | 土石流 | − |
| ウメケサコ橋 | 1928 | 98 | 東広島市 | 土石流 | ● |
| 大石橋 車道(左) | 1928 | 98 | 福山市 | 土石流 | − |
| 大石橋 車道(右) | 1928 | 98 | 福山市 | 土石流 | − |
| 市場橋 | 1928 | 98 | 神石高原町 | 土石流 | − |
| 柳橋 | 1930 | 96 | 庄原市 | 土石流 | − |
| 杉坂中橋 | 1930 | 96 | 東広島市 | 土石流 | − |
| 無名橋(9560.0) | 1930 | 96 | 庄原市 | 土石流 | ● |
| 無名橋 | 1930 | 96 | 呉市 | 土石流 | − |
読み取り:
政策的示唆: 国交省「橋梁の長寿命化修繕計画」では浸水だけでなく土砂災害も二重リスク要因として 組み込むべき (本記事の発見をそのまま政策提言に転用可能)。
河川浸水想定域 かつ 特別警戒区域 の重複領域を求める。両方が同時に襲う極限ゾーン。 平成30年7月豪雨 (2018) の被災地と一致するかを検証 (H5)。
↑ L10_sediment_disaster_cross.py 行 1294–1305
1294 1295 1296 1297 1298 1299 |

| 災害種別 | 浸水との重複(ha) |
|---|---|
| 土石流 | 154.20 |
| 急傾斜地 | 294.74 |
| 合計 | 448.94 |
読み取り:
H5 の検証: 重複域は 呉市/広島市安芸区/坂町/熊野町 周辺に集中するはず。
位置情報を L10_flood_sediment_overlap.csv の重心 (cx, cy → lat/lon) で確認可能。
本記事スクリプトでは ovl_fs に lat/lon 列を計算済み。
城跡・官衙データから、時代別の警戒区域内立地率を計算。戦国時代の山城 が 近世の平城より警戒区域内立地率が高いか?

| 時代 | N | 警戒内件数 | 立地率% |
|---|---|---|---|
| 官衙跡 | 12 | 3 | 25.0 |
読み取り:
応用: 城跡保存と土砂災害対策は 同じ山地でせめぎ合う。文化庁 × 国交省の 連携が必要な領域 (政策連携の発見)。
H2 (避難所自体が警戒区域内) を市町別に分解。どこの市町が深刻か を特定。

| 市町 | 避難所N | 警戒内 | 特別警戒内 | 警戒率% |
|---|---|---|---|---|
| 呉市 | 518 | 180 | 10 | 34.7 |
| 庄原市 | 247 | 59 | 4 | 23.9 |
| 尾道市 | 273 | 48 | 2 | 17.6 |
| 東広島市 | 279 | 45 | 5 | 16.1 |
| 江田島市 | 131 | 44 | 1 | 33.6 |
| 安芸太田町 | 81 | 43 | 6 | 53.1 |
| 広島市安佐北区 | 153 | 41 | 2 | 26.8 |
| 福山市 | 474 | 33 | 1 | 7.0 |
| 廿日市市 | 120 | 32 | 5 | 26.7 |
| 府中市 | 120 | 31 | 3 | 25.8 |
| 坂町 | 94 | 31 | 2 | 33.0 |
| 三原市 | 128 | 29 | 0 | 22.7 |
| 広島市安芸区 | 78 | 27 | 3 | 34.6 |
| 広島市安佐南区 | 156 | 26 | 0 | 16.7 |
| 広島市東区 | 89 | 25 | 2 | 28.1 |
読み取り:
| 仮説 | 判定 | 根拠 |
|---|---|---|
| H1 山際住居系の高立地率 | 支持 | 図3 第一種低層住居専用が立地率上位 (47.27%) |
| H2 避難所自体が警戒区域内 | 支持 | 855/4065 (21.0%) > 5% |
| H3 老朽橋×警戒 ≥ 50 件 | 支持 | 368 件 |
| H4 特別警戒は急傾斜地が大半 | 支持 | 急傾斜地 29,756 / 全特別警戒 43,093 = 69.1% |
| H5 浸水×特別警戒 = H30豪雨被災地 | 定性的支持 | 合計 448.9 ha, 重心位置を csv で確認可能 |
| H6 城跡 (山城) 高立地率 | 定性的支持 | 戦国期の山城は立地率上位 (図9) |
L07_double_risk_bridges.csv と L10_double_risk_bridges.csv を橋梁番号でマージし、
さらに sjoin で土砂判定を加えた表を作成 → 即時点検対象リストとして自治体に提供y_ymd 列) を
時系列マッチング、用途指定が先か警戒区域指定が先かを地区ごとに分類| STEP | 役割 | 入力 | 出力 | キー関数 |
|---|---|---|---|---|
| STEP1 | Shapefile 読込 | 3 種別 × 2 レベル の .shp | 各 GeoDataFrame | gpd.read_file |
| STEP2 | 統合 + dissolve | 5〜6 GeoDataFrame | kind×level 5 ポリゴン | pd.concat + dissolve |
| STEP3 | 用途地域読込 | landuse GeoJSON | 13 用途 dissolve 済 | dissolve(by='yoto_name') |
| STEP4 | 面×面 オーバーレイ | 用途 + 災害 | 用途×種別×レベル 交差 | gpd.overlay |
| STEP5 | 点 in 面 判定 | 7 種点 + 災害 | 各点に in_warn/in_spec 列付与 | gpd.sjoin |
| STEP6 | 条件抽出 (二重リスク) | 橋梁判定 | 老朽×警戒の橋一覧 | boolean フィルタ |
| STEP7 | 面×面 重複 (致命域) | 浸水 + 特別警戒 | 重複ポリゴン | unary_union + overlay |
| コード | 用途名 |
|---|---|
| 1 | 第一種低層住居専用 |
| 2 | 第二種低層住居専用 |
| 3 | 第一種中高層住居専用 |
| 4 | 第二種中高層住居専用 |
| 5 | 第一種住居 |
| 6 | 第二種住居 |
| 7 | 準住居 |
| 8 | 近隣商業 |
| 9 | 商業 |
| 10 | 準工業 |
| 11 | 工業 |
| 12 | 工業専用 |
| 13 | 田園住居 |
| dataset_id | 名称 | 本記事との関係 |
|---|---|---|
| #48 | 土砂災害警戒区域・特別警戒区域情報 (全県) | 主データ (3 種別 すべて) |
| #544 〜 #573 | 各市町別 (30 件) | city 列フィルタで再現可能 |