Lesson 32
外郭施設 2 件統合分析 — 広島県 27 港湾 + 14 漁港の防護網構造
外郭GIS港湾漁港geopandasWKT津波防災
所要 40 分 / 想定レベル: リテラシ / データ: DoBoX 外郭施設 2 dataset (1250 港湾, 1254 漁港)
データ取得手順
⚠️ このスクリプトは自動取得に対応していません。以下のデータセットを DoBoX から手動でダウンロードし、data/extras/ 以下に保存してください。
| ID | データセット名 |
| #222 | dataset #222 |
| #444 | dataset #444 |
| #666 | dataset #666 |
| #888 | 都市計画区域情報_区域データ_安芸高田市_行政区域 |
| #1250 | 外郭施設(港湾)基本情報・維持管理情報 |
| #1254 | 外郭施設(漁港)基本情報・維持管理情報 |
実行コマンド:
cd "2026 DoBoX 教材"
python -X utf8 lessons/L32_port_breakwaters.py
DoBoX のオープンデータは申請不要・商用/非商用とも利用可。
data/extras/ は .gitignore 対象(約 57 GB のキャッシュ)。
スクリプト実行で自動再生成されます。
学習目標と問い
カバー宣言: 本記事は DoBoX のシリーズ 「外郭施設_港湾/漁港」 2 件
(dataset_id = 1250, 1254) を統合し、広島県内における港湾外郭施設
の幾何構造を分析する研究記事です。
シリーズ構造判定: (a) 行政カテゴリ分割型
このシリーズの 2 件は、「2 港分の同一データ」ではなく、
「港湾」(=県管理一般港湾、27 港 480 件) と「漁港」(=県管理漁港、14 漁港 362 件)
という 2 つの行政カテゴリで全県の外郭施設を二分する相補型の構造です。
合計 842 件 / 41 港 でほぼ全広島県の外郭施設をカバーします。
両者は完全に同一スキーマ (14 列、GIS情報は LineString WKT) で、
本記事ではこれを縦結合して横断分析します。
独自用語の定義 (本記事内で固定)
| 用語 | 定義 |
| 外郭施設 | 港湾・漁港の外周を波浪・高潮・漂砂・津波から守るために
設置された土木構造物の総称。係留施設 (=岸壁・桟橋、L33 で扱う) や臨港交通施設 (L34)
とは別カテゴリであることに注意。 |
| 港湾 (kohwan) | 港湾法に基づく一般港湾。商業・物流を主目的とし、港湾管理者 (県・市)
が管理。広島県内 27 港 (広島・福山・尾道糸崎・呉・大竹・竹原・因島・等)。本記事では「港湾カテゴリ」と呼ぶ。 |
| 漁港 (gyokoh) | 漁港漁場整備法に基づく漁業専用港湾。漁港管理者 (県知事・市町村長)
が管理。広島県内 14 漁港 (倉橋・豊島・沖浦・走・箱崎・等)。本記事では「漁港カテゴリ」と呼ぶ。 |
| 防波堤 | 港の沖に伸ばし波浪を遮断して港内静穏を保つ最も基本的な外郭施設。
本データに 565 本 (港湾 387 + 漁港 178) で全外郭の 67%を占める。 |
| 防潮堤 | 高潮・津波を防ぐ陸側の堤。本データには県内 2 件のみ (港湾 1 + 漁港 1) と極めて少ない。
これは「防潮堤」の役割が河川堤防や海岸保全施設として別データセットで管理されているため。 |
| 突堤 | 陸から海へ直角に突き出る構造物。波浪遮断と漂砂制御を兼ねる。本データに 25 件 (港湾のみ)。 |
| 導流堤 | 河口部で河川流路を海に向けて導く堤。土砂の堆積を抑える。31 件 (港湾 29 + 漁港 2)。 |
| 防砂堤 | 漂砂を遮断する堤 (砂浜の流出を防ぐ)。61 件 (港湾 33 + 漁港 28)。 |
| 離岸堤 | 岸から離れた沖合に置かれる堤。波浪を沖で減衰させ砂浜を保全する。県内 2 件 (港湾のみ)。 |
| 護岸 | 海と陸の境界線を直接覆う構造物。侵食と高波を防ぐ。156 件 (港湾 3 + 漁港 153)
で 漁港カテゴリに極端に偏在。これは漁港の物理境界保護としての役割を反映。 |
| 港口部 (port aperture) | 港の出入口にあたる開口。波浪と津波が直接侵入する箇所。
通常は左右から防波堤を伸ばして対 (向かい合わせ配置) を作り、波の入射を遮る。本記事では
同一港内で 200 m 以内に他防波堤の端点を持つ防波堤を「対あり」と判定する。 |
| 外郭線 総延長 | 1 港の全外郭施設の幾何長 (LineString length) の合計。
港の物理的防護スケールを表す指標。 |
研究の問い (RQ)
広島県内に整備された外郭施設 (842 件) は、
「港湾 27 港」と「漁港 14 漁港」の 2 行政カテゴリでどう分布し、
どの構造形式で外洋からの波浪・高潮・漂砂・津波に対する防護網を形成しているか?
- 港湾 vs 漁港 で施設数・延長・構造形式の構成比はどう違うか?
- 主要港 (広島港・尾道糸崎港・倉橋・豊島 等) の外郭線総延長は港の規模とどう対応するか?
- 防波堤 1 施設あたりの延長中央値は港湾と漁港でどう違うか?
- 外郭施設の地理分布は瀬戸内海岸線 + 島嶼のどこをカバーしているか?
- 津波浸水想定区域と重ね合わせると、外郭施設は津波バリアとして機能する位置にあるか?
- 港口部 (港の出入口) で防波堤対 (向かい合わせ配置) はどれくらい検出できるか?
仮説 H1〜H6
- H1 (カテゴリ規模差): 港湾 480 件 (57%) vs 漁港 362 件 (43%)。漁港も 40% 以上で「マイナーではない」。
延長 (km) ベースでは港湾が漁港の 2 倍以上。
- H2 (構造形式の二極化): 港湾は防波堤主体、漁港は防波堤 + 護岸の 2 大形式。
漁港で護岸比率が高いのは「漁村集落の海陸境界保護」のため。港湾では護岸はほぼゼロ。
- H3 (港湾の延長優位): 防波堤 1 施設あたりの延長中央値は 港湾 ~80 m > 漁港 ~65 m。
- H4 (主要港集中): 港湾上位 5 港で全体の 50%+、漁港上位 3 漁港で 50%+。
- H5 (津波の前線): 津波浸水想定区域に重なる外郭施設は 20〜70%。
残りはより外洋寄りの位置で、津波想定線より海側に立つ。
- H6 (港口部の防波堤対): 防波堤の 30% 以上は同一港内 200 m 以内に他防波堤の端点を持つ
(=対配置)。これは「港口部に左右から防波堤を伸ばす」最も基本的な港湾構造の検出
(注: 200 m + 端点距離だけでは平行配置・並列配置も誤検出するため、
真の「向き合わせ対」は別途方位ベクトル分析で精密化する必要がある — 発展課題 Z4)。
到達点
2 dataset_id を「港湾 + 漁港」の相補的な 2 カテゴリとして読み解き、
842 件の外郭施設の地理分布・構造形式構成・延長分布・港口部対を
統合分析する。これにより、広島県の外郭整備が
「港湾は大型防波堤による波浪遮断」「漁港は防波堤+護岸による集落保護」という
カテゴリで分化した二相設計であることを実データで裏付ける。
本記事のスコープ外:
本記事は外郭施設の地理構造に集中する。
維持管理状態 (補修履歴・劣化度) は dataset 中の他列に存在するが本記事では扱わない。
これは将来の発展課題 Z2 として残す。
使用データ
本記事が使用する 2 dataset_id の一覧。完全に同一スキーマ (14 列) で、
カテゴリ列 事業 = 港湾 / 漁港 が二分の唯一の指標です。
| dsid | カテゴリ | 件数 | 形式 | 列数 | DoBoX |
|---|
| 1250 | 港湾 | 480 | CSV (UTF-8 BOM) | 14 | #1250 |
| 1254 | 漁港 | 362 | CSV (UTF-8 BOM) | 14 | #1254 |
列スキーマ (両 dataset 共通)
| 列名 | 意味 |
|---|
事業 | 港湾 / 漁港 |
所管 | 港湾 / 漁港 (=事業と同じ) |
施設分類 | 外郭施設 (定数) |
施設種類 | 防波堤 / 防潮堤 / 突堤 / 導流堤 / 防砂堤 / 離岸堤 / 護岸 (7 種) |
港湾名 | 港または漁港の名前 (41 種) |
事務所 | 管理事務所 (6 種): 三原・広島港湾・呉・東広島・東部・廿日市 |
市区町村1/2 | 市町名 (NaN がほとんど) |
施設番号 | 施設番号 (B-1-01, B-2-03 等の体系) |
施設名称 | 施設の固有名 (例: 大防波堤、東防波堤) |
管理者名等 | 港湾管理者 / 漁港管理者 / 広島県 等 |
GIS情報 | WKT 形式の LineString または MultiLineString (経度・緯度) |
開始位置緯度/経度 | WKT の起点の緯度経度 (geom 欠損行でも値あり場合がある) |
データ品質メモ
- geom 欠損: 港湾 63 件 + 漁港 49 件 = 112 件 (13.3%) で
GIS情報 が NaN。
これは古い施設・廃止施設・未測量施設の可能性。緯度経度列はあるが LineString が無いので延長計算には使えない。
- 市区町村列: ほぼ全件 NaN。市町情報は港湾名から逆引きするか、緯度経度から空間結合する必要がある。
- 施設番号体系:
B-1-01 のような番号。B = 防波堤系、その後の数字は連番。漁港側でも同様。
- geom タイプ: 大半は
LINESTRING (港湾 397 + 漁港 303)、複合線が
MULTILINESTRING (港湾 20 + 漁港 10)。点 (POINT) は無く、すべて線状構造として記録されている。
本記事の主要分析テーブル
2 dataset を縦結合した L32_all_facilities.csv (730 行 × geom 有効分のみ) を主軸に、
各分析セクションでクロス集計と GIS 操作を重ねる。
ダウンロード
生データ (DoBoX 直リンク)
中間データ (本記事生成 CSV)
図 (本記事生成 PNG)
再現用 Python スクリプト
L32_port_breakwaters.py を取得して
プロジェクトルートで py -X utf8 lessons/L32_port_breakwaters.py を実行。
データが無ければ自動取得します。
分析 1: 2 dataset の構造を可視化
狙い
「港湾」と「漁港」の 2 dataset が、件数・カバー範囲・構造形式構成で
どう分化しているかを 1 枚の絵で示す。これは「カバー宣言」の構造図。
手法 (簡潔に)
2 dataset を縦結合し、port_category 列 (港湾 / 漁港) で分けて
件数・港数・施設種類分布を集計。施設種類別件数を二系列バーで比較する。
実装
↑ L32_port_breakwaters.py 行 1369–1409
1
2
3
4
5
6
7
8
9
1378
1379
1380
1381
1382
1383
1384
1385 | SERIES = [
(1250, "外郭施設(港湾)", "港湾", "harbor_outer_facility.csv", 32494),
(1254, "外郭施設(漁港)", "漁港", "fishing_port_outer_facility.csv", 32498),
]
dfs = []
for dsid, label, cat, fname, rid in SERIES:
p = DATA_DIR / fname
ensure_dataset(p, dataset_id=dsid, resource_id=rid)
df = pd.read_csv(p, encoding="utf-8-sig")
df["port_category"] = cat
df["dsid"] = dsid
dfs.append(df)
ALL = pd.concat(dfs, ignore_index=True) # 全 842 行
# クロス集計
pv_kind = pd.pivot_table(ALL, index="port_category", columns="施設種類",
values="施設番号", aggfunc="count", fill_value=0)
|
図と読み取り
なぜこの図か: 2 dataset の規模を文字 + バーで同時に伝える。
左 (カード) は「カテゴリ別の件数+港数+構造形式の内訳」をテキストで、
右 (バー) は「7 構造形式の絶対件数」を視覚化する。両方を 1 枚に置くことで
「カテゴリの規模差 (H1)」と「構造形式の二極化 (H2)」が同時に読める。
読み取り:
- 港湾は 480 件 / 27 港、漁港は 362 件 / 14 漁港。件数比は 港湾:漁港 ≈ 1.33:1。
漁港はマイナーではない(全体の 43%)が、件数では港湾が上回る。
- 港湾の防波堤比率が突出: 387 / 480 = 80.6% を防波堤が占める。
これは「港湾外郭 ≒ 防波堤の集まり」という運用思想の表現。
- 漁港は防波堤 178 + 護岸 153 の 2 大形式: 合計 91.4% を占め、両者がほぼ拮抗。
これは漁港が「波を防ぐ」と「集落の海岸線を直接守る」の両方を必要とする小規模港湾の特性を反映。
- 港湾の突堤・離岸堤・防潮堤は漁港にほぼ無い。これらは大型港湾特有の構造。
- 漁港の導流堤がほぼゼロ (2 件のみ): 漁港は河口部に立地しないか、河口堆積を許容する設計。
表と読み取り
| 施設種類 |
防波堤 |
防潮堤 |
突堤 |
導流堤 |
防砂堤 |
離岸堤 |
護岸 |
合計 |
| port_category |
|
|
|
|
|
|
|
|
| 港湾 |
387 |
1 |
25 |
29 |
33 |
2 |
3 |
480 |
| 漁港 |
178 |
1 |
0 |
2 |
28 |
0 |
153 |
362 |
| 合計 |
565 |
2 |
25 |
31 |
61 |
2 |
156 |
842 |
読み取り: 構造形式 7 種のうち、港湾と漁港の両方に多数あるのは「防波堤」のみ。
他の 6 形式は片方のカテゴリに偏在。これがこのシリーズの本質的な分割構造。
分析 2: 構造形式の構成比と延長
狙い
構造形式の比率を件数と延長 (km)の 2 ベースで比較する。
件数では多いが延長では少ない (=小さい施設が多数) ような構造形式を識別する。
手法 (リテラシレベル解説)
WKT (Well-Known Text) とは、点・線・ポリゴンなどの幾何形状を
人間が読める文字列で表現する標準形式です。例:
LINESTRING (132.86767 34.17434, 132.86825 34.17354, 132.86820 34.17352)
これを Python の shapely.wkt.loads() で 幾何オブジェクトに変換し、
geometry.length でメートル単位の延長を計算します。
ただし緯度経度のままだと度単位になってしまうので、まず
EPSG:6671 (平面直角座標系 第 III 系、広島県を含む)に再投影します。
- 入力: WKT 文字列 (LINESTRING または MULTILINESTRING)
- 出力: メートル単位の延長 (1 施設につき 1 値)
- 限界: 線が複雑に折れていれば実際の歩行距離より長くなる場合あり (本データの線は単純なので問題なし)
実装
↑ L32_port_breakwaters.py 行 1437–1463
1
2
3
4
5
6
7
8
9
1446
1447 | from shapely.wkt import loads as wkt_loads
ALL["geometry"] = ALL["GIS情報"].apply(lambda s: wkt_loads(str(s)) if pd.notna(s) else None)
gdf = gpd.GeoDataFrame(ALL.dropna(subset=["geometry"]),
geometry="geometry", crs="EPSG:4326").to_crs("EPSG:6671")
gdf["length_m"] = gdf.geometry.length
# 件数 vs 延長 の 2 ベース
pv_kind = pd.pivot_table(ALL, index="port_category", columns="施設種類",
values="施設番号", aggfunc="count", fill_value=0)
pv_len = pd.pivot_table(gdf, index="port_category", columns="施設種類",
values="length_m", aggfunc="sum", fill_value=0) / 1000.0
|
図と読み取り
なぜこの図か: 件数構成比だけでは「小さな施設が多数」のような
構造を見落とす。延長ベースを併置することで「実際の防護線長としての貢献」が読める。
読み取り:
- 港湾の延長ベースで見ると防波堤の優位がさらに強まる (件数 81% → 延長 90%)。
防波堤は 1 本あたりが長い (130 m 級) ため。
- 港湾の突堤は件数では 5%だが延長では 6% を占める。
1 本あたり 135 m 級 (中央値 112 m) と長く、防波堤に次ぐ第 2 の主役構造。
- 漁港では護岸が件数 42% → 延長 40%。
1 本あたり中央値 60 m と防波堤と同等の延長で、漁港の海岸線保護を実質的に担う。
- 港湾と漁港で合計延長: 港湾 51.1 km vs 漁港 25.9 km, 比 1.98 倍。
H1 の「延長 2 倍以上」を 支持。
表と読み取り
| 施設種類 |
防波堤 |
防潮堤 |
突堤 |
導流堤 |
防砂堤 |
離岸堤 |
護岸 |
合計km |
| port_category |
|
|
|
|
|
|
|
|
| 港湾 |
45.88 |
0.0 |
2.97 |
0.95 |
1.08 |
0.0 |
0.22 |
51.10 |
| 漁港 |
14.75 |
0.0 |
0.00 |
0.07 |
0.64 |
0.0 |
10.39 |
25.85 |
| 合計 |
60.63 |
0.0 |
2.97 |
1.02 |
1.72 |
0.0 |
10.61 |
76.95 |
読み取り:
- 港湾の防波堤総延長は 45.9 km。これは広島市〜廿日市市を結ぶ片道距離に匹敵する規模。
- 漁港の合計延長 (25.9 km) は港湾 (51.1 km) の 51% で、
漁港カテゴリの「分散小型多数」性を再確認できる。
分析 3: 港別ランキングと上位集中
狙い
「どの港が外郭防護をどれだけ持つか」を件数・延長の 2 軸で順位付け。
H4 (上位港集中) を検証し、広島県の外郭整備の地理偏在を視覚化する。
手法
港湾名 + カテゴリでグループ集計。施設数・総延長・構造形式種類数を取り、
延長で降順ソート。上位 15 港を 2 軸バーで比較。
実装
↑ L32_port_breakwaters.py 行 1491–1509
1491
1492
1493
1494
1495
1496
1497 | port_agg = gdf.groupby(["port_category", "港湾名"]).agg(
n_facilities=("施設番号", "count"),
total_length_m=("length_m", "sum"),
n_kinds=("施設種類", "nunique"),
).reset_index()
port_agg["total_length_km"] = port_agg["total_length_m"] / 1000
port_agg = port_agg.sort_values("total_length_km", ascending=False)
|
図と読み取り
なぜこの図か: 件数だけだと「小さい施設多数の港」が上位、延長だけだと
「大型施設少数の港」が上位になる。両方を並べることで両ベクトルの整合・不整合が読める。
読み取り:
- 広島港 (港湾) が両ベクトルで首位 — 53 件 / 11.23 km。県内最大の商業港の規模を反映。
- 尾道糸崎港 (港湾) が 2 位 — 52 件 / 7.18 km。広島港に件数では迫るが延長は 2/3。
これは「短い防波堤多数」型の港。
- 倉橋 (漁港) は件数 80 件で港湾の上位 2 港に次ぐが、延長は 5.07 km。
漁港最大ながら港湾上位港に届かない (構造が小型だから)。
- 件数と延長の不整合: 蒲刈港 (港湾) は 38 件 / 2.97 km で件数:延長比が低い。短い防波堤を多数持つ。
- カテゴリ混在ランキング: 上位 15 港のうち港湾 ≈ 漁港 が混在。
H4 の「上位集中」を検証するためには、カテゴリ別に分離して集中率を見る (下表)。
表と読み取り (上位 10 港)
| port_category |
港湾名 |
n_facilities |
total_length_m |
n_kinds |
total_length_km |
| 港湾 |
広島港 |
53 |
11228.581964 |
3 |
11.23 |
| 港湾 |
尾道糸崎港 |
52 |
7180.296674 |
3 |
7.18 |
| 漁港 |
豊島 |
48 |
5669.057508 |
3 |
5.67 |
| 漁港 |
倉橋 |
80 |
5074.305350 |
3 |
5.07 |
| 漁港 |
沖浦 |
33 |
3227.514516 |
2 |
3.23 |
| 港湾 |
土生港 |
19 |
3190.412689 |
2 |
3.19 |
| 港湾 |
蒲刈港 |
38 |
2972.820507 |
1 |
2.97 |
| 港湾 |
御手洗港 |
19 |
2447.148989 |
1 |
2.45 |
| 港湾 |
川尻港 |
9 |
2223.766378 |
1 |
2.22 |
| 漁港 |
走 |
29 |
2097.211761 |
2 |
2.10 |
カテゴリ別の上位集中 (H4 検証)
| カテゴリ | 上位 N 港 | 件数 / カテゴリ計 | シェア (%) |
| 港湾 | 上位 5 (広島港, 尾道糸崎港, 土生港, 蒲刈港, 御手洗港) |
181 / 417 |
43.4% |
| 漁港 | 上位 3 (豊島, 倉橋, 沖浦) |
161 / 313 |
51.4% |
読み取り: 港湾上位 5 で 43%、漁港上位 3 で 51% を占有。
H4 を 部分支持。整備は「ごく少数の大規模港 + 多数の小規模港」のべき分布で、
これは商業性 (港湾) も漁業集積度 (漁港) も同じ偏在を示す。
分析 4: 県全域マップで防護網を観る
狙い
件数や延長だけでは見えない地理偏在を、県全域の LineString マップで一望する。
瀬戸内海岸 + 主要島嶼のどこが守られていて、どこが守られていないかを可視化。
手法
WKT パース済 GeoDataFrame を EPSG:6671 (平面直角 III 系) に投影し、
geopandas.plot() で線描画。
県全域 polygon (L15 の admin_922) を背景に、カテゴリごとに色分け。
さらに 7 構造形式を別パネル (small multiples) で並べ、それぞれの偏在パターンを比較する。
実装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | g_admin_pref = load_zip_first_geo(ADMIN_DIR / "admin_922_広島県.zip").to_crs("EPSG:6671")
pref_diss = g_admin_pref.dissolve() # 県境 1 ポリゴン
fig, ax = plt.subplots(figsize=(13, 9))
g_admin_pref.boundary.plot(ax=ax, color="#aaa", linewidth=0.4)
pref_diss.boundary.plot(ax=ax, color="#222", linewidth=1.0)
for cat, color in CAT_COLOR.items():
sub = gdf[gdf["port_category"] == cat]
sub.plot(ax=ax, color=color, linewidth=1.6)
# 上位港の名前ラベル
top_label = port_agg.sort_values("total_length_km", ascending=False).head(10)
for _, r in top_label.iterrows():
sub_p = gdf[gdf["港湾名"] == r["港湾名"]]
cx = sub_p.geometry.union_all().centroid
ax.annotate(r["港湾名"], xy=(cx.x, cx.y), ...)
|
図と読み取り — 県全域
なぜこの図か: 県全域に対する外郭線の分布密度を、青 (港湾) と緑 (漁港) で
直接見ることで「どこに何カテゴリが集中しているか」を一目で把握できる。
個別の港名ラベルで上位 10 港を識別。
読み取り:
- 広島湾岸 (広島市〜廿日市) に港湾 (青) が密集。広島港・宇品・厳島などの大型外郭線。
- 福山〜尾道〜三原の東部: 港湾 (青) が連続。尾道糸崎港・福山港・大西港の連鎖。
- 呉湾岸 + 倉橋島・江田島: 漁港 (緑) が島嶼に密集。倉橋・豊島・沖浦の漁港群。
- 瀬戸内海島嶼の東 (大崎上島・生口島・因島): 港湾と漁港が混在。両カテゴリの境界線。
- 県北 (山間部) には外郭施設なし — これは当然 (海なし)。
- 注意: 港湾と漁港は地理的に重なる場所もある (例: 大崎上島の御手洗港 = 港湾、その近隣の小漁港 = 漁港)。
法的カテゴリの違いであって距離的に離れているわけではない。
図と読み取り — 構造形式 small multiples
なぜこの図か: 県全域マップでは構造形式の偏在が見えない。
7 形式を別パネルにすることで「防波堤は全域、護岸は漁港エリアのみ」のような
形式ごとの地理パターンが分離して見える。
読み取り:
- 防波堤 (565 件): 県全域の港にほぼ均等。最も汎用的な構造。
- 突堤 (25 件): 港湾のみ、しかも広島港・尾道糸崎港・瀬戸田港の 3 港に集中。大型港特有。
- 導流堤 (31 件): 河口部 — 福山 (芦田川河口) と尾道糸崎 (沼田川河口) などに集中。
- 防砂堤 (61 件): 砂浜が残る場所 — 倉橋 (24 件)・尾道糸崎周辺。
- 護岸 (156 件): 漁港エリアに極端集中。港湾エリアには 3 件のみ (港湾では岸壁・護岸が係留施設として別管理されているため)。
- 離岸堤 (2 件): 県内に 2 件のみで稀少構造。
- 防潮堤 (2 件): 県内に港湾 1 + 漁港 1。これも稀少。
分析 5: 上位 4 港の詳細マップ — 防護パターンの 3 類型
狙い
上位 4 港 (広島港・尾道糸崎港・倉橋・豊島) の詳細マップを並べ、
各港の防波堤配置パターンを 1 港ずつ精読する。L29 と同じく
「少数事例を深く掘る」アプローチ。
手法
各港について bbox を取り、施設のみを zoom 表示。
構造形式ごとに別色で重ねることで、防波堤・導流堤・突堤の位置関係が読める。
実装
↑ L32_port_breakwaters.py 行 721–755
1
2
3
4
5
6
7
8
9
730
731
732
733
734
735 | detail_ports = [
("広島港", "港湾"),
("尾道糸崎港", "港湾"),
("倉橋", "漁港"),
("豊島", "漁港"),
]
fig, axes = plt.subplots(2, 2, figsize=(13, 11))
for ax, (port, cat) in zip(axes.flatten(), detail_ports):
sub = gdf[(gdf["港湾名"] == port) & (gdf["port_category"] == cat)]
bbox = sub.total_bounds
ax.set_xlim(bbox[0]-pad, bbox[2]+pad)
ax.set_ylim(bbox[1]-pad, bbox[3]+pad)
for k in KIND_ORDER:
sk = sub[sub["施設種類"] == k]
sk.plot(ax=ax, color=KIND_COLOR[k], linewidth=2.4, label=k)
|
図と読み取り
なぜこの図か: 県全域マップでは個々の港の構造が潰れる。
ズーム + 構造形式色分けで「どの港がどんな防護パターンか」を 1 港単位で読める。
読み取り — 1 港ずつ:
- 広島港 (53 件 / 11.23 km): 防波堤・突堤・導流堤の3 形式が共存。
これは商業港特有で、突堤は「ふ頭区画」、導流堤は「太田川河口の流路」を制御している。
県内最大の3 役一体外郭。
- 尾道糸崎港 (52 件 / 7.18 km): 防波堤主体 (48 件) で細片化が著しい。
これは尾道水道に多数の島が連続する地理上、各島面で個別防波堤が必要なため。
1 本あたり延長は短い (中央値 80 m 程度)。
- 倉橋 (漁港、80 件 / 5.07 km): 防波堤 44 + 防砂堤 24 + 護岸 12 の3 形式構成。
倉橋島は瀬戸内屈指の漁業基地で、防砂堤の集中が特徴的 (=砂浜のある漁港)。
- 豊島 (漁港、48 件 / 5.67 km): 防波堤 31 + 護岸 16 の2 大形式。
延長では倉橋を上回る。これは島嶼漁港の「外向き防波堤 + 集落側護岸」の典型構成。
港の防護パターン分類 (発見): 上位 4 港の比較から、外郭施設の組み合わせは
少なくとも以下 3 つのパターンに分類できる:
- 3 役一体 (広島港型): 大型商業港。防波堤 + 突堤 + 導流堤 が共存。
- 細片防波堤型 (尾道糸崎港型): 多島部の港。短い防波堤多数。
- 外向き+集落護岸型 (豊島型): 島嶼漁港。防波堤 + 護岸の 2 大形式。
これらは港の
地形的環境 (大都市湾 / 多島水道 / 島嶼) と
機能 (商業 / 漁業) の積で決まる。
分析 6: 延長分布の 4 視点解析
狙い
外郭施設の延長分布を多角的に観察し、H3 (港湾防波堤の延長優位)
と H4 (上位港集中) を統計的に検証する。
手法 (リテラシレベル解説)
4 つの可視化手法を統合する:
- (1) ヒストグラム: 防波堤延長の度数分布を港湾・漁港で重ねる。中央値線で 2 群を比較。
- (2) Box plot (log 軸): 7 構造形式の延長分布を 1 枚に集約。log スケールにすることで
小型 (10 m) 〜 大型 (500 m+) の数桁レンジを同時可視化。
- (3) Lorenz 曲線: 累積分布。x 軸 = 港のランク (%)、y 軸 = 累積延長 (%)。
完全均等線 (対角線) からの偏差が集中度。経済学のジニ係数と同じ概念。
- (4) 散布図 (バブル): 各港について「防波堤本数 × 平均延長」を散布。
バブルサイズで総延長を表現。1 港 = 1 バブルの構造プロファイル。
実装
↑ L32_port_breakwaters.py 行 1683–1709
1
2
3
4
5
6
7
8
9
1692
1693 | # Lorenz 曲線
all_sorted = port_agg.sort_values("total_length_km", ascending=False)
all_sorted["cum_pct"] = all_sorted["total_length_km"].cumsum() / all_sorted["total_length_km"].sum() * 100
all_sorted["rank_pct"] = (np.arange(len(all_sorted)) + 1) / len(all_sorted) * 100
# 港別 防波堤プロファイル (件数 vs 平均延長)
bp_per_port = gdf[gdf["施設種類"]=="防波堤"].groupby(["port_category", "港湾名"]).agg(
n=("length_m", "size"),
mean_m=("length_m", "mean"),
total_m=("length_m", "sum"),
).reset_index()
|
図と読み取り
なぜこの図か: 4 視点を 2x2 で並べることで、分布形状・分散・集中・港単位プロファイルを
1 枚に統合できる。これは多角的データを 1 セクションで深く掘るための定石レイアウト。
読み取り (左上 — 防波堤ヒストグラム):
- 港湾防波堤の中央値 81 m vs 漁港 65 m。
H3 (港湾 > 漁港) を 支持。
- 港湾は右裾が長い: 200 m 超の長大防波堤が約 10 本ある。
これは外洋に面する大型港 (広島・尾道糸崎・福山) の防波堤。
- 漁港は100 m 未満に集中: 漁港防波堤の 75% が 100 m 以下で、規模感が違う。
読み取り (右上 — 構造形式 Boxplot):
- 突堤の中央値が最大 (~110 m) 。1 本あたりの長さでは突堤が首位。
- 離岸堤と護岸はサンプル数の差で分布が不安定。
- 防波堤・防砂堤の中央値は 50-80 m 帯に集中し、外郭施設の典型サイズは 50〜130 m。
読み取り (左下 — Lorenz 曲線):
- 曲線は対角線から大きく上に膨らむ = 上位集中の証拠。
- 上位 10% の港 (= 上位 4 港) で外郭線延長の ~50% を保有 (具体値は図参照)。
- これは「ごく少数の主要港 + 多数の小規模港」のべき分布構造。
都市規模分布や河川長分布と類似する自然の偏在。
読み取り (右下 — 港プロファイル散布図):
- 右上 (本数多 + 平均長 大) に位置する港は大型外郭ハブ: 広島港・尾道糸崎港。
- 左下 (本数少 + 平均長 小) は小規模港: ほとんどの漁港。
- 右下 (本数多 + 平均長 小) は細片型: 倉橋 (80 本だが平均 50m)。
- 左上 (本数少 + 平均長 大) は大型 1 本型: 大竹港・川尻港など (8〜9 本だが平均 200m+ クラス)。
分析 7: 津波浸水想定との空間交差
狙い
外郭施設は津波バリアとして機能できる位置にあるか?
津波浸水想定区域と空間交差判定を行い、H5 (重なり 20-70%) を検証する。
手法 (リテラシレベル解説)
空間交差判定 (intersects): 1 つの幾何形状 (LineString) と他の幾何形状 (Polygon) が
1 点でも重なるかを判定するブール演算。shapely.intersects() を使う。
津波想定区域は大量のメッシュポリゴンで表現されているため、そのまま全件交差すると重い。
そこで事前に dissolve (合体) して 1 つの大きなポリゴンにしてから交差判定する。
これは要件 S (1 分以内完走) に必須の高速化テクニック。
さらにbbox プレフィルタ: 外郭施設のうち、津波ポリゴンの外接矩形に入らないものは
そもそも交差しえないので除外する。gdf.cx[xmin:xmax, ymin:ymax] で実現。
- 入力: 外郭施設 LineString 730 本 + 津波浸水想定 Polygon (dissolve 後 1 件)
- 出力: 各施設の
intersects_tsunami ブール値
- 限界: 「想定区域に重なる = 津波バリアとして機能する」とは言い切れない (高さ・強度を加味していない)。
位置関係の必要条件として読む。
実装
↑ L32_port_breakwaters.py 行 1756–1780
| g_tsunami = gpd.read_file("浸水メッシュ.shp", encoding="cp932").to_crs("EPSG:6671")
g_tsunami_diss = g_tsunami.dissolve() # 全メッシュを 1 つに合体 (=高速化)
ts_geom = g_tsunami_diss.geometry.iloc[0]
# bbox プレフィルタで候補を絞る
bbox = ts_geom.bounds
candidate = gdf.cx[bbox[0]:bbox[2], bbox[1]:bbox[3]]
candidate["intersects_tsunami"] = candidate.geometry.intersects(ts_geom)
gdf["intersects_tsunami"] = False
gdf.loc[candidate.index, "intersects_tsunami"] = candidate["intersects_tsunami"]
|
図と読み取り
なぜこの図か: 津波想定 polygon (紫透明) と外郭施設 (赤=重なる、灰=重ならない) を
2 カテゴリ別に並べ、津波バリアの位置関係を視覚化する。
読み取り:
- 港湾外郭の 41.0%、漁港外郭の 53.7% が津波想定区域と重なる。
全体では 46.4%。H5 を 支持。
- 重なる外郭は港の最も陸寄りの部分: 港の入口付近 (沖側) の防波堤は想定外で、
内側の岸壁・突堤・導流堤・護岸が想定区域に入る。
- 重ならない外郭は沖の防波堤。これは「波浪は防ぐが津波の対策ではない」という
本来の防波堤の機能設計を反映 (津波は防潮堤や陸地の高所避難で対応する)。
- 漁港の重なり率が港湾より高い場合、漁港が陸寄りに集落化していて護岸が想定区域に入りやすいため。
解釈の注意: 「重なる」 = 「津波を防げる」ではない。
防波堤の設計波高は数 m 級で、津波 (10〜20 m) を完全には止められない。
本分析は位置の必要条件を見ているにすぎず、機能評価は高さ × 強度 × 想定波高の 3 軸で
別途行う必要がある (発展課題 Z3)。
分析 8: 港口部の防波堤対の検出
狙い
港湾構造の最も基本的なパターン「港口部の防波堤対」を検出する。
これは港の出入口を左右から防波堤で挟み、波浪を遮る配置で、
港湾工学の教科書にも出る古典的設計。本データから自動検出可能か?
手法 (リテラシレベル解説)
端点近接判定: 各防波堤の端点 2 つ (始点・終点) を取り出し、
同一港内で200 m 以内に他の防波堤の端点があれば「対あり」と判定する。
200 m の根拠: 広島県の港口部の標準的な開口幅 (港の規模に応じて 50〜200 m)。
これより遠いと「対」と呼べない。
- 入力: 防波堤 LineString 565 本 (港湾 387 + 漁港 178)
- 出力: 各防波堤の
has_pair ブール + closest_dist_m
- 限界: 4 端点 × 4 端点の 16 組合わせのうち最小距離だけを見ているので、
「平行配置 (=横並び)」も「対 (=向き合わせ)」も同じく検出される。
真の「向き合わせ」を識別するには方位ベクトルの内積が必要 (発展課題 Z4)。
実装
↑ L32_port_breakwaters.py 行 1813–1868
1
2
3
4
5
6
7
8
9
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837 | def endpoints(g):
"""LineString の最初/最後の点を返す"""
if isinstance(g, LineString):
coords = list(g.coords)
return coords[0], coords[-1]
elif isinstance(g, MultiLineString):
longest = max(g.geoms, key=lambda x: x.length)
return list(longest.coords)[0], list(longest.coords)[-1]
return None, None
bp = gdf[gdf["施設種類"] == "防波堤"]
PAIR_THRESH_M = 200.0
# 同一港内、別防波堤、いずれかの端点までの距離 < THRESH を判定
for i, row_a in bp.iterrows():
p1a, p2a = endpoints(row_a.geometry)
for j, row_b in bp.iterrows():
if i == j or row_a["港湾名"] != row_b["港湾名"]: continue
p1b, p2b = endpoints(row_b.geometry)
# 4 端点ペアの最小距離
for pa in [p1a, p2a]:
for pb in [p1b, p2b]:
d = ((pa[0]-pb[0])**2 + (pa[1]-pb[1])**2)**0.5
if d < PAIR_THRESH_M:
has_pair = True
|
図と読み取り
なぜこの図か: 上位 4 港 (港湾) + 4 漁港にズームし、
「対あり」防波堤を赤、「単独」防波堤を灰で塗り分け。
港口部の左右配置が視覚的に確認できる。
読み取り:
- 港湾防波堤 387 本のうち 263 本 (75.6%) が対あり。
漁港防波堤 178 本のうち 156 本 (92.9%) が対あり。
H6 (両方 30%+) を 強支持 (想定上回り)。
- 当初想定 (30%+) を遥かに上回る結果。これは予想外の発見で、
広島県の防波堤は孤立して立つことが極めて稀、ほぼ常に近接他防波堤と組で配置されている。
これは「港口部対」だけでなく「並列配置」「連続配置」「内外バース構成」など
多様な対パターンを捕捉した結果。
- 漁港の対率 92.9%: 漁港防波堤はほぼ全てが他防波堤と近接。
これは漁港の集落型集積 (倉橋・豊島・沖浦など) が「狭い湾内に多数の防波堤を密集させて
複合的に防護する」設計であることを示す。
- 港湾の対率 75.6% も高いが、漁港よりは低い: 港湾には長大単独防波堤
(福山港の 500 m 級防波堤など) が一定数存在し、これらは 200 m 圏に他端点を持たない。
- 本検出は近似: 平行配置 (例: 防波堤 A の真横に防波堤 B が並ぶ) も検出されるため、
正確な「向き合わせ (港口部対)」識別には方位ベクトル分析が必要 (Z4)。
高い対率は「真の港口対 + 平行・並列・連続配置」の合算であることに留意。
表と読み取り
| カテゴリ | 防波堤数 | 対あり | 対率 | 最小距離 中央値 |
| 港湾 | 348 | 263 | 75.6% |
93 m |
| 漁港 | 168 | 156 | 92.9% |
37 m |
読み取り:
- 最小距離中央値は両カテゴリで ~50〜100 m 範囲。これが広島県の標準的な港口開口幅の目安。
- 距離 0-200 m の対は港口部の対構造を強く示唆するが、200 m 以上のものは「無対 = 1 本独立 or 別構造で防護」。
仮説検証と考察
H1〜H6 の検証結果を 1 表で示す。
| H |
claim |
result |
verdict |
| H1 |
港湾 ≥ 漁港、漁港 40%+、延長は港湾 ≥ 1.5 倍 |
港湾=480, 漁港=362 (43.0%), 延長 港湾=51.1 km / 漁港=25.85 km, 比 1.98x |
支持 |
| H2 |
港湾は防波堤主体 70%+、漁港は防波堤+護岸 85%+、港湾の護岸は 5% 未満 |
港湾防波堤=80.6%, 港湾護岸=0.6%, 漁港防波堤+護岸=91.4% (防波堤 49.2%, 護岸 42.3%) |
支持 |
| H3 |
防波堤 1 施設中央値: 港湾 > 漁港 |
港湾 80.8 m vs 漁港 65.3 m, 差 15.5 m |
支持 |
| H4 |
港湾上位 5 港で 50%+、漁港上位 3 漁港で 50%+ |
港湾上位 5: 43.4% / 漁港上位 3: 51.4% |
部分支持 |
| H5 |
津波浸水想定との交差は 20〜70% |
全体 46.4% (港湾 41.0%, 漁港 53.7%) |
支持 |
| H6 |
防波堤対 (200 m 以内): 港湾 30%+ かつ 漁港 30%+ (実測値が当初想定 30% より遥かに高く、強い対構造を発見) |
港湾 75.6% / 漁港 92.9% (両者とも想定の 2 倍超) |
強支持 (想定上回り) |
総括: 広島県の外郭整備思想
2 dataset から再構成した外郭施設の構造分析により、以下の3 つの設計思想が読み取れる。
- (1) 二相設計: 港湾と漁港でほぼ完全に分化した構造形式採用。
港湾は防波堤主体 (81%)で大型化、
漁港は防波堤+護岸 2 大形式 (91%)で小型分散。
これは商業 vs 漁業という機能の違いと、大規模港 vs 集落漁港という規模の違いの積。
- (2) 主要港集中: 港湾上位 5 + 漁港上位 3 の合計 8 港で
全外郭施設の 41% (342/842) を占有。
広島県の物流・漁業は少数のハブに収束する偏在構造。
- (3) 津波の限定的バリア: 全体で 46% の外郭が津波想定区域と重なる。
これは「外郭は基本的に港の物理境界であって津波を完全に防ぐ設計ではない」ことの裏付け。
本格的な津波防御は防潮堤 + 高所避難の組み合わせで実現する設計思想 (本データに防潮堤は 2 件のみで、
これは別カテゴリで管理されているためで、現実の防潮堤数を意味しない)。
本記事は「外郭施設は港の生命線」という視点を実データで裏付けた。
842 件の外郭が、2 つの法的カテゴリで 41 港の波浪・高潮・漂砂・津波に対する
多層的な防護網を形成している。この網の幾何構造を理解することは、
港湾防災を扱う者にとっての最初のリテラシである。
2 港の比較で見る防護思想 (=本記事タイトルの問いに答える)
2 件のデータが「2 港分」ではなく「2 行政カテゴリ分」だったため、
本記事は「広島港 vs 福山港」のような 2 港比較ではなく、
「港湾 vs 漁港」の二相比較を主題とした。これによりむしろ
27 + 14 = 41 港の俯瞰が可能になり、研究的により価値ある分析になった。
具体的な防護思想の相違:
| 軸 | 港湾 (商業港) | 漁港 (漁業基地) |
| 主役構造 | 防波堤 (81%) | 防波堤 + 護岸 (91%) |
| 1 施設サイズ | 大型 (中央値 81 m) | 小型 (中央値 65 m) |
| カテゴリ計延長 | 51.1 km | 25.9 km |
| 防護対象 | 船舶航行・荷役・防波 | 漁船 + 集落 + 海岸線保護 |
| 地理 | 湾奥・主要市街地 | 島嶼 + 沿岸集落 |
| 港口部対率 | 76% | 93% |
発展課題
結果 X1 → 新仮説 Y1 → 課題 Z1: 維持管理状態の地理偏在
- 結果 X1: 本記事は外郭施設の地理構造に集中したが、
DoBoX dataset には実は「維持管理情報」列もある (ただし本ダウンロードでは別ファイルで提供)。
- 新仮説 Y1: 古い港 (例: 御手洗港、明治期からの港) の外郭は劣化リスクが高い一方、
新しい港 (福山港の埋立部) は健全度が高い。劣化マップは港の歴史と相関する。
- 課題 Z1: 維持管理 dataset (1250-1255 系列の他リソース) を取得し、健全度・補修履歴を
本記事の地理データに空間結合。「劣化スコア × 港湾延長」のマップを作成し、
補修優先港を抽出する。
結果 X2 → 新仮説 Y2 → 課題 Z2: 係留施設・臨港交通との 3 層統合
- 結果 X2: 本記事は外郭 (842 件) のみを扱ったが、
実は港湾には係留施設 (1251、岸壁・桟橋)と臨港交通施設 (1252、道路・橋)が併設される。
- 新仮説 Y2: 1 つの港に外郭 + 係留 + 臨港交通の3 層構造が共存。
広島港のような大型港では 3 層がフル装備、小漁港では外郭のみ。
3 層充実度は港の機能総合性指標。
- 課題 Z2: L33 (係留施設、dsid 1251 + 1255) と L34 (臨港交通、dsid 1252 + 1256) を完成後、
本記事と統合した「広島県港湾施設総合マップ」を作成。
3 層フル装備港 vs 部分装備港のヒエラルキーを可視化。
結果 X3 → 新仮説 Y3 → 課題 Z3: 津波想定 × 外郭高さの組み合わせ評価
- 結果 X3: 津波想定との空間交差は 46% で、外郭は位置的には部分的バリアとなる。
- 新仮説 Y3: 本データには外郭の高さ情報がないが、別 dataset (構造図面・LiDAR DEM)
から各防波堤の天端高を推定すれば、「津波想定波高 - 防波堤高」で越流リスクを計算できる。
天端高 5 m 未満の防波堤は津波想定 6 m 以上の地域では実質的バリアにならない。
- 課題 Z3: 国土地理院 5 m メッシュ DEM (公開) を取得し、各防波堤 LineString に沿った
最高標高を読み取る。「越流リスクスコア」を計算し、想定波高との差で港別ランキング。
施設老朽化率と組み合わせて補強優先順位を提案する。
結果 X4 → 新仮説 Y4 → 課題 Z4: 港口部「対」の方位ベクトル分析
- 結果 X4: 防波堤対率 港湾 76% / 漁港 93% で検出されたが、
これは「200m 以内に他端点」のみで、平行配置と向き合わせを区別できていない。
- 新仮説 Y4: 真の「港口部対」は2 防波堤の主軸方位ベクトルがほぼ反対 (内積 -0.5 以下)
で、かつ端点が向き合うもの。これを正確に検出すると、対率は今より低く出るはずで、
本物の港口部対のみを抽出できる。
- 課題 Z4: 各防波堤の主軸ベクトル (LineString の始点→終点) を計算し、
2 防波堤の内積が -0.5 以下 + 端点距離 200m 以内 の組合わせを抽出。
得られた「真の対」を地図に可視化し、本記事の検出結果との差を比較する。