Lesson 49

津波浸水想定区域 単独 3 研究例分析 — 瀬戸内海の津波を 3 つの研究角度で読み解く

L49津波浸水ShapefileRQ×3Format B海起源浸水
所要 40 分 / 想定レベル: 中級+ / データ: DoBoX dataset 46 (1.25M メッシュ Shapefile)

データ取得手順

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

IDデータセット名
#46津波浸水想定区域情報
#222dataset #222
#333dataset #333
#444dataset #444
#666dataset #666
#888都市計画区域情報_区域データ_安芸高田市_行政区域

実行コマンド:

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

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

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

⬇ L49_tsunami_inundation.py

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

学習目標と問い

本記事は DoBoX のシリーズ 「津波浸水想定区域情報」 1 件 (dataset_id = 46) を 単独で取り上げ、広島県沿岸の津波浸水想定構造を 3 つの独立した研究角度から並列に分析する。 原データは 1,256,706 メッシュの 10m × 10m 点データで、 本記事では計算容易性のため 30m に集約 (138,134 セル)、 全 124 km² の浸水想定を扱う。

本データの位置付け — 「瀬戸内海の津波」 とは

津波と聞くと太平洋沿岸 (東日本大震災・南海トラフ津波) を想起しがちだが、 広島県は瀬戸内海に面し、太平洋ほどの大津波には見舞われない。 しかし南海トラフ巨大地震 (M8-9 級) が起きた際、 湾奥地形・干拓地・河口低地では局所的に 5m 超の浸水が想定されている。 本データは広島県土木建築局が水防法 + 津波防災地域づくり法に基づき告示した、 想定し得る最大規模の津波浸水範囲・深さ。

L8「河川 × 津波 × 盛土」 との重複回避と本記事のスコープ

L8 では本データ (dataset 46) を「3 ハザード重ね合わせ」 の 1 要素として用いた (rank 8 段階に dissolve、河川氾濫 + 盛土と空間 overlay)。本記事は L8 とは 異なる 3 つの研究角度で津波単独を深掘りする:

L8 で得られた知見「津波は 1.25M メッシュで dissolve 8 ランクできる」 を 継承しつつ、L8 では触れなかった「沿岸距離との関係」「海起源 3 ハザードの相互比較」を本記事で扱う。 両者は独立した 4 角度の併用で津波想定を網羅する。

研究の問い (3 RQ)

仮説 H1〜H5

本記事の独自用語定義

到達点

3 つの研究角度それぞれで、津波浸水想定区域という同じ 1 つのデータから 独立した知見を引き出す。とくに 「データ数 = 1 でも、研究角度 × 3 = 知見 × 3」 という探究法を、L48 (多段階浸水想定 1 件 × 3 RQ) と並ぶ Format B として実装する。 さらに「沿岸距離プロファイル」 「海起源 3 ハザード重複」 という、 L8 や L44 では扱わなかった2 つの新角度を本記事で初めて定量化する。

使用データ

本記事は DoBoX シリーズの 1 件のみ を扱う:

項目
dataset_id 46
タイトル 津波浸水想定区域情報
DoBoX URL https://hiroshima-dobox.jp/datasets/46
形式 Shapefile (Polygon, .shp+.shx+.dbf+.prj)
メッシュ数 1,256,706 (10m × 10m)
30m 集約後 138,134 セル (本記事の処理単位)
属性列 X座標 (int), Y座標 (int), 最大浸水深 (float, m)
総浸水想定面積 124.32 km² (8 ランクの合計)
最大浸水深 8.34 m (本データ最大値)
重み付き平均深さ 1.31 m
対象市町数 18 市町 (うち沿岸 16 市町)
CRS Custom TMerc (lat_0=36, lon_0=132.166666, k=0.9999) ≒ EPSG:6671
公表年月日 2025-12-03 (最終更新)
作成主体 広島県土木建築局
ライセンス CC-BY 4.0

8 ランク 凡例 (国交省/広島県ガイドライン準拠)

rank コード 深さラベル rank 中央値 m 色 hex 本データの面積 km² シェア % 備考
10 0.0〜0.5m 0.25 #bee2ff 29.55 23.77
20 0.5〜1.0m 0.75 #87c4f0 33.14 26.65
30 1.0〜2.0m 1.50 #56a4dc 34.17 27.49
40 2.0〜3.0m 2.50 #2c83c4 20.29 16.32
50 3.0〜5.0m 4.00 #1c63a4 7.05 5.67
60 5.0〜10.0m 7.50 #0e4282 0.12 0.10
70 10.0〜20.0m 15.00 #7d2cbf 0.00 0.00 本データ最大は 8.34m → rank 70/80 (10m 超) は空
80 20m以上 25.00 #4a1280 0.00 0.00 本データ最大は 8.34m → rank 70/80 (10m 超) は空

L8 と同じランク区分。本データの最大深 8.34m のため、rank 70 (10-20m) と rank 80 (20m+) は本データでは空。瀬戸内海の津波は太平洋側ほど深くならないことの直接的な証拠。

L8 と L49 のスコープ差別化: L8 では本データを「河川 × 津波 × 盛土」 重ね合わせの 1 要素としてのみ扱った。本記事はこれを主役として 3 RQ 深掘りし、L8 が触れなかった「沿岸距離プロファイル」 「海起源 3 ハザード比較」 を新規分析する。

ダウンロード

DoBoX 本体 (1 件)

中間 CSV (本レッスンが生成)

図 PNG (9 枚)

再現スクリプト

再現コマンド

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

初回実行時は _l49_build_cache.py を内部で呼んで 1.25M メッシュを 30m に集約 → admin sjoin → 海岸距離 → 高潮/河川 contains を計算 (~3.5 分)。結果は data/extras/L49_tsunami_inundation/_cache/ に GPKG/Parquet/CSV として保存。2 回目以降の本スクリプト実行は ~30 秒 で完了。本データ (dataset 46) は L8 で先行取得済の場合は再 DL 不要。

【RQ1】 浸水深ランク・市町別構造の研究 — 瀬戸内海の津波の形状

狙い (RQ1)

津波浸水想定区域という1 つの Shapefileを、 深さランク 8 段階・市町 19 区分で集計し、形状を定量化する。 原 1.25M メッシュ → 30m 集約 → 8 ランク dissolve というパイプラインで、 重い空間処理を 30 秒以内に収めつつ、4 角度 (全域マップ / ランク stack / 市町コロプレス / 市町別ランク stack) で多角的に読み解く。

手法 (Shapefile → 集約 → dissolve → 主題図)

Shapefile が手元にあるので、geopandas で実ポリゴン処理する (要件 R 準拠):

入力: 1.25M 行の Shapefile + admin polygon (27 行)。
出力: 8 行の dissolve GeoDataFrame + 138K 行の cells_30m Parquet。
限界: 30m 集約により 9 個の 10m メッシュの最大深さしか保存されず、 平均深さや全件分布は失われる (= 教材的な軽量化のため意図的近似)。 厳密な面積比較が必要なら原 1.25M で集計するが、本記事は構造把握が目的のため近似で十分。
代替案: 集約せず原メッシュで集計すると 5-10 分かかる。要件 S を満たせない。

実装コード (1.25M → 30m → 8 ランク dissolve + admin sjoin)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 1.25M メッシュ → 30m 集約 → 8 ランク dissolve
import pyogrio, pandas as pd, numpy as np, geopandas as gpd, shapely

# Step 1: 読み込み + 30m 集約
df = pyogrio.read_dataframe("浸水メッシュ.shp", read_geometry=False)
df.columns = ["x", "y", "depth"]
df["gx"] = (df["x"] // 30) * 30
df["gy"] = (df["y"] // 30) * 30
agg = df.groupby(["gx","gy"], as_index=False)["depth"].max()
agg.columns = ["x","y","depth"]                 # 138,134 行 (11.0%)

# Step 2: 8 ランク化
RANK_BINS  = [0, 0.5, 1.0, 2.0, 3.0, 5.0, 10.0, 20.0, 999]
RANK_CODES = [10, 20, 30, 40, 50, 60, 70, 80]
agg["rank"] = pd.cut(agg["depth"], bins=RANK_BINS, labels=RANK_CODES, right=False).astype(int)

# Step 3: 同ランクを 30m 正方形 polygon で dissolve
out_geoms, out_ranks, out_areas = [], [], []
for rk in RANK_CODES:
    sub = agg[agg["rank"] == rk]
    if len(sub) == 0: continue
    polys = shapely.box(sub["x"]-15, sub["y"]-15, sub["x"]+15, sub["y"]+15)
    merged = shapely.unary_union(polys)        # 1 MultiPolygon
    out_geoms.append(merged); out_ranks.append(rk); out_areas.append(merged.area/1e6)

gdf = gpd.GeoDataFrame({"rank": out_ranks, "area_km2": out_areas, "geometry": out_geoms},
                       crs="EPSG:6671")        # 8 行 (rank 70/80 は空のため 6 行)

# Step 4: admin sjoin で市町コード付与
admin = gpd.read_file("admin_diss.gpkg").to_crs("EPSG:6671")
pts = gpd.GeoDataFrame(agg, geometry=gpd.points_from_xy(agg.x, agg.y), crs="EPSG:6671")
pts = gpd.sjoin(pts, admin[["CITY_CD","geometry"]], how="left", predicate="within")
pts["CITY_CD"] = pts["CITY_CD"].fillna(-1).astype(int)

図 1: 県全域 8 ランク主題図 (choropleth)

なぜこの図か: 学習者がまず「広島県沿岸の津波想定はどこにあるか」を一目で理解するため、 全域マップに 8 ランク色を重ね、沿岸 16 市町を黄色で強調。 これにより「沿岸都市部 + 干拓地」 に浸水想定が集中することが視覚的にすぐ分かる。

図 1: 県全域 8 ランク主題図
図 1: 県全域 8 ランク主題図

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

図 2: 浸水深 8 ランク 面積構成

なぜこの図か: 図 1 が地理的分布を見せたのに対し、本図は深さの統計分布を見せる。 左 (1 本の積層 bar) で 8 ランクの相対比を直感的に、右 (個別 bar) で絶対値を読む 2 方向の表示。 H1 (浅広分布) の検証に最適化したレイアウト。

図 2: 8 ランク 面積構成 (積層 + 個別 bar)
図 2: 8 ランク 面積構成 (積層 + 個別 bar)

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

図 3: 市町別 浸水面積 コロプレス

なぜこの図か: 図 1 は色をランクで割り振ったが、本図は色を市町別総面積で割り振る。 これにより「どの市町が津波想定面積の多いリーダー」 かを直接見られる。 H2 (上位 3 市町集中) の検証に最適。

図 3: 市町別 浸水面積 コロプレス
図 3: 市町別 浸水面積 コロプレス

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

図 4: 市町別 深さランク stacked bar (Top 15)

なぜこの図か: 図 3 は総面積のみを見せたが、本図は 市町ごとの深さ構成を見せる。 深いランク (紫・紺) が多い市町と浅いランク (水色) が多い市町を視覚的に区別できる。 重心深さも y 軸ラベルに併記し、市町の「深さ性質」 を読む。

図 4: 市町別 深さランク stacked bar (Top 15)
図 4: 市町別 深さランク stacked bar (Top 15)

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

表: 8 ランク 凡例 + 面積

rank コード 深さラベル rank 中央値 m 色 hex 本データの面積 km² シェア % 備考
10 0.0〜0.5m 0.25 #bee2ff 29.55 23.77
20 0.5〜1.0m 0.75 #87c4f0 33.14 26.65
30 1.0〜2.0m 1.50 #56a4dc 34.17 27.49
40 2.0〜3.0m 2.50 #2c83c4 20.29 16.32
50 3.0〜5.0m 4.00 #1c63a4 7.05 5.67
60 5.0〜10.0m 7.50 #0e4282 0.12 0.10
70 10.0〜20.0m 15.00 #7d2cbf 0.00 0.00 本データ最大は 8.34m → rank 70/80 (10m 超) は空
80 20m以上 25.00 #4a1280 0.00 0.00 本データ最大は 8.34m → rank 70/80 (10m 超) は空

この表から読み取れること: 0.0-0.5m と 0.5-1.0m が浸水想定面積の 50% 弱、1.0-2.0m が 27%、2.0-3.0m が 16%、それ以上は計 6% 程度。rank 70/80 (10m+) は本データでは空 → 瀬戸内海では 10m 超の深い浸水想定はない。

表: 市町別 浸水面積ランキング (Top 19)

順位 市町名 総面積_km2 重心深さ_m rank_10_km2 rank_20_km2 rank_30_km2 rank_40_km2 rank_50_km2 rank_60_km2
1 呉市 15.54 0.84 6.00 5.39 3.11 0.85 0.19 0.00
2 広島市南区 15.22 1.79 1.57 2.95 4.90 3.93 1.85 0.00
3 尾道市 13.76 1.34 3.90 3.86 2.53 2.09 1.37 0.01
4 広島市中区 10.46 1.60 0.89 2.05 4.20 3.11 0.20 0.01
5 広島市西区 10.22 1.57 1.95 1.90 2.67 3.16 0.54 0.01
6 三原市 9.11 1.26 2.76 2.36 2.13 1.10 0.76 0.00
7 江田島市 7.17 1.05 1.76 2.32 2.46 0.56 0.07 0.00
8 竹原市 5.06 1.46 0.94 1.47 1.26 0.97 0.43 0.00
9 大竹市 4.91 1.17 1.27 1.16 1.69 0.75 0.04 0.00
10 廿日市市 3.99 0.73 1.77 1.33 0.79 0.07 0.03 0.01
11 広島市佐伯区 3.35 1.18 0.90 0.90 0.98 0.51 0.04 0.02
12 福山市 3.22 1.76 0.50 0.73 0.86 0.64 0.46 0.04
13 海田町 2.62 1.61 0.16 0.44 1.30 0.68 0.03 0.01
14 広島市安芸区 2.47 1.70 0.36 0.38 0.85 0.65 0.23 0.00
15 坂町 1.88 0.85 0.67 0.70 0.39 0.09 0.02 0.00
16 東広島市 1.68 1.17 0.45 0.50 0.42 0.25 0.05 0.00
17 広島市東区 1.44 1.07 0.32 0.35 0.74 0.01 0.01 0.00
18 府中町 0.94 0.94 0.25 0.31 0.37 0.01 0.00 0.00

この表から読み取れること: 上位 3 市町 (呉・南区・尾道) で全体の 35% 超を集中。重心深さは 広島市南区 が最深 (1.79m)、最浅は 廿日市市 (0.73m) と市町間で 2.4 倍の差。湾形状や干拓地の有無が深さ重心に強く影響する。

【RQ2】 沿岸距離プロファイルの研究 — 200-500m 再ピークと安全神話の反証

狙い (RQ2)

L8 では津波を「3 ハザード重ね合わせ」 の1 要素として用いたが、 津波単独の距離プロファイル (= 沿岸からの距離と浸水深の関係) は 扱わなかった。本記事はこの空白を埋める。各セルから沿岸 16 市町境界 (≒ 海岸線) への最短距離を計算し、距離ビン × 深さランクのヒートマップで 「津波の到達特性」 を読む。

手法 (Shapely STRtree による高速最近傍距離)

沿岸 16 市町の admin polygon の境界 (boundary)をすべて line として取り出し、 STRtree (空間インデックス) でラップ。各セルから tree.nearest() で 最短境界線分を取得し、line への直交距離を計算する。 138K セル × 16 市町境界 を 30 秒程度で処理。

入力: 138K セルの geometry + 16 市町境界 line (合計 1,784 km)。
出力: 各セルに dist_coast_m (m) を付与した Parquet。
限界: 沿岸市町境界には海岸線以外の内陸境界も含まれるため、 厳密な海岸距離ではなく 「沿岸市町境界からの最短距離」 の近似。 ただし津波浸水域の 99% は海岸沿いにあるため、運用上の差は小さい。
代替案: 国土地理院の海岸線データ (基盤地図情報) を使えば厳密化可能だが、 依存ファイルが増えるため本記事は近似版で済ませる。

実装コード

L49_tsunami_inundation.py 行 1294–1344

 1
 2
 3
 4
 5
 6
 7
 8
 9
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
# 沿岸距離計算 (Shapely STRtree で 138K セル × 16 市町境界 を 30 秒で処理)
import geopandas as gpd, numpy as np
from shapely import STRtree

admin = gpd.read_file("admin_diss.gpkg").to_crs("EPSG:6671")
COASTAL = {101,102,103,104,107,108,202,203,204,205,207,211,213,215,304,309}
coastal = admin[admin["CITY_CD"].isin(COASTAL)]
bnd_lines = list(coastal.geometry.boundary.values)   # 16 LineStrings (合計 1784 km)

tree = STRtree(bnd_lines)

# 138K 点を batch で処理
pts_geom = pts_admin.geometry.values
dists = np.zeros(len(pts_geom), dtype=np.float32)
BATCH = 50000
for k in range(0, len(pts_geom), BATCH):
    ks = pts_geom[k:k+BATCH]
    idx = tree.nearest(ks)                            # nearest line index
    for i, ki in enumerate(ks):
        dists[k+i] = ki.distance(bnd_lines[idx[i]])  # point → line 直交距離

pts_admin["dist_coast_m"] = dists
# 距離分布: q10=22m, q50=503m, q90=2894m, max=7910m

図 5: 沿岸距離 × 深さ ヒートマップ

なぜこの図か: 距離 × 深さの 2 次元クロス集計を 1 枚で俯瞰するには ヒートマップが最適。8 距離ビン × 6 深さランク = 48 セルそれぞれの 面積 (km²) と行内 % を併記し、定量的な意思決定資料になるようにする。

図 5: 沿岸距離 × 深さ ヒートマップ
図 5: 沿岸距離 × 深さ ヒートマップ

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

図 6: 距離プロファイル (面積 + 平均深さ二軸)

なぜこの図か: 図 5 のヒートマップから、距離ビンごとの「総面積」 と「平均深さ」を 取り出して 1 つの折れ線にする。これにより 「どの距離帯が深さの再ピークを持つか」 「どの距離帯が面積の主役か」 を直接読める。 H3 (200-500m が再ピーク) の検証に直結。

図 6: 距離プロファイル (面積 + 平均深さ)
図 6: 距離プロファイル (面積 + 平均深さ)

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

図 7: 福山平野 vs 呉市湾奥 zoom 比較

なぜこの図か: 図 5/6 で「200-500m の干拓地が再ピーク」 という性質を 発見したので、その典型例 2 か所を地理的に確かめる。 福山市は典型的な干拓平野、呉市は典型的な湾奥多島地形。 両者の浸水想定の形状の違いを視覚化する。

図 7: 福山平野 vs 呉市湾奥 zoom 比較
図 7: 福山平野 vs 呉市湾奥 zoom 比較

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

表: 沿岸距離ビン × 深さランク 面積 (km²)

距離ビン 0.0〜0.5m_km2 0.5〜1.0m_km2 1.0〜2.0m_km2 2.0〜3.0m_km2 3.0〜5.0m_km2 5.0〜10.0m_km2
0-50m 6.59 7.90 4.75 1.09 0.76 0.00
50-100m 2.48 2.42 2.36 0.84 0.18 0.00
100-200m 2.57 2.94 3.78 1.58 0.37 0.00
200-500m 3.81 4.62 7.12 4.55 1.20 0.04
500-1km 4.05 5.32 7.10 5.60 2.00 0.03
1-2km 4.04 4.53 4.84 4.54 1.28 0.04
2-5km 5.08 4.44 3.55 1.73 1.00 0.01
5km+ 0.92 0.96 0.67 0.35 0.26 0.00

この表から読み取れること: 0-50m と 200-500m と 500-1km の 3 帯が浸水想定の中核。0-50m は浅水 (0.5-1.0m) が多く、200-500m は中深部 (1.0-2.0m) が多い → 「海岸線 50m の浅水ベルト」 と「内陸 200-1km の干拓平野」 が異なる物理機構で浸水することを示す。

表: 距離ビン サマリ (面積 + 平均深さ + 深水比率)

距離ビン 総面積_km2 平均深さ_m 深水比率_%
0-50m 21.09 0.97 3.60
50-100m 8.29 1.06 2.16
100-200m 11.25 1.24 3.36
200-500m 21.34 1.48 5.78
500-1km 24.10 1.57 8.41
1-2km 19.27 1.48 6.85
2-5km 15.81 1.16 6.40
5km+ 3.16 1.23 8.25

この表から読み取れること: 平均深さは 200-500m で 1.48m と最大、0-50m は 0.97m。深水比率 (>3m) も 200-500m で 5.8% と最大。これは H3 (距離減衰の非単調性) を強く支持する。

【RQ3】 海起源 3 ハザード比較研究 — 重複パターンと盲点ゾーン

狙い (RQ3)

津波 (海底地震) は単独の機構だが、同じ場所が高潮 (台風) や河川氾濫 (降雨) でも 浸水しうる。本記事は L44 高潮 max + 河川想定最大規模の 3 ハザードを 津波 138K セルに sjoin し、4 パターン (津波のみ / +河川 / +高潮 / 三重) の 面積を集計する。「最も保守的な指定」 (= 3 ハザードのうち最深) を要する 盲点ゾーンを同定する。

手法 (3 ハザード contains by STRtree)

3 ハザードを別々の Shapefile から読み込み、union geometry を作って 138K セルが各 union に contains されるかを STRtree.query(predicate="within") で判定:

入力: 138K セル + 高潮 max (~280 km²) + 河川 max (~800 km²)。
出力: 各セルに hits_storm, hits_river フラグを付与した Parquet。 4 パターン × 6 ランク のクロス集計テーブル。
限界: 河川 max polygon の幾何修復 (3D→2D + buffer(0)) に時間がかかる (~2 分)。これは初回のみ build_cache でキャッシュ。
代替案: 河川を 32 水系別に扱えば granular な分析になるが、 本記事は「海起源 vs 陸起源」の対比が主軸なので river_union 1 つで十分。

実装コード

L49_tsunami_inundation.py 行 1428–1486

 1
 2
 3
 4
 5
 6
 7
 8
 9
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
# 3 ハザード contains 判定 (STRtree で高速)
import geopandas as gpd, numpy as np, shapely
from shapely import STRtree

storm = gpd.read_file("diss_max.gpkg").to_crs("EPSG:6671")
storm_union = storm.geometry.union_all()
river = gpd.read_file("shinsui_souteisaidai.shp").to_crs("EPSG:6671")
river["geometry"] = gpd.GeoSeries(shapely.force_2d(river.geometry.values), crs="EPSG:6671")
river_union = river.geometry.union_all()

# STRtree.query(predicate="within") で batch 判定
hits_storm = np.zeros(len(pts_geom), dtype=bool)
hits_river = np.zeros(len(pts_geom), dtype=bool)
tree_storm = STRtree([storm_union])
tree_river = STRtree([river_union])

BATCH = 100000
for k in range(0, len(pts_geom), BATCH):
    ks = pts_geom[k:k+BATCH]
    idx_s = tree_storm.query(ks, predicate="within")
    if len(idx_s): hits_storm[idx_s[0]] = True
    idx_r = tree_river.query(ks, predicate="within")
    if len(idx_r): hits_river[idx_r[0]] = True

# 4 値分類
pts_admin["pattern"] = pts_admin["hits_storm"]*2 + pts_admin["hits_river"]
# 0 = 津波のみ, 1 = +河川, 2 = +高潮, 3 = 三重

図 8: 3 ハザード重複の Venn 風 + 4 パターン bar

なぜこの図か: 3 ハザードの重なりを概念図 (Venn 風)定量 barの 2 つで見せる。Venn は「3 つの円が重なる」 イメージを直感に伝え、 bar は「実際にどのパターンが何 km²」 を厳密に示す。

図 8: 3 ハザード Venn + 4 パターン bar
図 8: 3 ハザード Venn + 4 パターン bar

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

図 9: 深さランク × 高潮重複

なぜこの図か: H4 を補強するため、深さランクごとに高潮重複率を比較する。 浅水ランクと深水ランクで重複率が違うか? 「深い場所ほど両機構で被災しやすい」 のか 「浅い場所ほどそうなのか」 を読む。

図 9: 深さランク × 高潮重複
図 9: 深さランク × 高潮重複

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

表: 4 パターン重複サマリ

パターン番号 重複ラベル 面積_km2 セル数 (30m) シェア_%
0 津波のみ 45.31 50339 36.44
1 津波+河川 0.96 1070 0.77
2 津波+高潮 22.35 24838 17.98
3 津波+高潮+河川 55.70 61887 44.80

この表から読み取れること: 津波単独 (45.3 km², 36.4%)、津波+河川 (1.0 km², 0.8%)、津波+高潮 (22.4 km², 18.0%)、三重 (55.7 km², 44.8%) → 三重盲点ゾーンが過半を占める。これは津波単独想定だけでは防災投資設計が不完全であることを示す。

表: 深さランク × 高潮重複 (単独 vs 高潮込み)

rank 深さラベル alone with_storm 合計_km2 重複率_%
10 0.0〜0.5m 12.80 16.75 29.55 56.70
20 0.5〜1.0m 13.77 19.37 33.14 58.50
30 1.0〜2.0m 10.41 23.77 34.17 69.60
40 2.0〜3.0m 5.68 14.61 20.29 72.00
50 3.0〜5.0m 3.56 3.49 7.05 49.50
60 5.0〜10.0m 0.06 0.06 0.12 51.50

この表から読み取れること: 中深部 (1-2m, 2-3m) の高潮重複率が 60% 超で最大。これは「海岸 200-500m の干拓地」 が津波と高潮の両方で同じ場所が同じ深さで浸水することを定量的に示す。防災投資の優先エリアは中深部 + 干拓地。

仮説検証総合

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

仮説 RQ 予想 観測 判定
H1 (浅広分布) RQ1 <2m が支配的、>3m は <20% <2m = 77.9%, >3m = 5.8%, 重心深 1.31m 支持
H2 (市町偏在) RQ1 上位 3 市町シェア > 35% 上位 3 = ['呉市', '広島市南区', '尾道市'], シェア 39.4% 支持
H3 (距離減衰の非単調性) RQ2 200-500m 帯が 0-50m 帯より深い (干拓地効果) 0-50m 平均深 = 0.97m, 200-500m 平均深 = 1.48m 支持
H4 (3 ハザード重複) RQ3 津波 ∩ 高潮 > 40%, 津波 ∩ 河川 > 30%, 3 重 > 30% ∩高潮 = 62.8%, ∩河川 = 45.6%, 3重 = 44.8% 支持
H5 (指定の階層性) 全体 津波 = 確率不明 + 想定最大 1 件、高潮 = 100 年 + 30 年 + 伊勢湾 = 3 規模、河川 = 6 規模 + 想定最大 津波 1 件指定 (本記事), 高潮 3 件指定 (L44), 河川 6+1 段階 (L48 + L4-L11) 支持

3 RQ × 3 結論

機構比較サマリ

機構 起源 発生確率 想定総面積_km2 最大深さ_m 確率規模 DoBoX_dataset
津波 (海底地震) 南海トラフ M8-9 級地震 30 年以内 70-80% 124.32 8.34 想定最大規模 (= 1 件指定) 46
高潮 (台風) 気圧低下 + 吹き寄せ 100 年に 1 度級 242.88 20m+ 想定最大規模 + 30y + 伊勢湾 = 3 規模 43, 44, 45
河川氾濫 流域降雨 (1/100〜想定最大) 1/5〜1/100 + 想定最大 ≒ 県内河川 32 水系合算 20m+ 計画規模 + 想定最大 (Shapefile),1/5〜1/100 = 6 段階 (PDF L48) L4-L11 計 39 件 (河川), 1640 (L47), 1641 (L48)

この表から読み取れること: 津波は確率不明 + 1 件指定、高潮は 3 規模指定 (max + 30y + 伊勢湾)、河川は 6 規模 + 想定最大の制度的階層差。津波の「単独指定」 は確率設定の困難さ (海底地震の予測精度) に由来する制度的選択。本記事の RQ3 は、この階層差を 「同時被災可能性」 から照合した。

発展課題

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

発展課題 1 (RQ1 由来)

発展課題 2 (RQ2 由来)

発展課題 3 (RQ3 由来)

発展課題 4 (制度設計, 全体由来)