Lesson 33

係留施設 2 件統合分析 — 広島県 27 港湾 + 14 漁港の船舶受入構造

係留GIS港湾漁港geopandasWKT岸壁物揚場外郭との階層
所要 40 分 / 想定レベル: リテラシ / データ: DoBoX 係留施設 2 dataset (1251 港湾, 1255 漁港)

データ取得手順

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

IDデータセット名
#222dataset #222
#444dataset #444
#666dataset #666
#888都市計画区域情報_区域データ_安芸高田市_行政区域
#1251係留施設(港湾)基本情報・維持管理情報
#1255係留施設(漁港)基本情報・維持管理情報

実行コマンド:

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

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

学習目標と問い

カバー宣言: 本記事は DoBoX のシリーズ 「係留施設_港湾/漁港」 2 件 (dataset_id = 1251, 1255) を統合し、広島県内における港湾係留施設船舶受入構造を分析する研究記事です。L32 (外郭施設) の続編として、 「外郭で守られた港内のどこに、どんな係留が配置されるか」を空間結合で読み解きます。

シリーズ構造判定: (a) 行政カテゴリ分割型 (L32 と同型)

このシリーズの 2 件は、「2 港分の同一データ」ではなく「港湾」(=県管理一般港湾、27 港 802 件) と「漁港」(=県管理漁港、14 漁港 422 件) という 2 つの行政カテゴリで全県の係留施設を二分する相補型構造。 合計 1224 件 / 41 港、対象港集合は L32 (外郭施設) と完全一致。 両者は完全に同一スキーマ (14 列、GIS情報は LineString WKT) で、 本記事ではこれを縦結合して横断分析します。

独自用語の定義 (本記事内で固定)

用語定義
係留施設船舶が陸 (または陸近傍構造物) に接岸して係留するための土木構造物の総称。 本記事では岸壁・物揚場・浮さん橋・船揚場・さん橋・係船くい・係船浮標 の 7 種を含む。 外郭施設 (=防波堤等、L32 で扱った) や臨港交通施設 (=道路、L34) とは別カテゴリ
岸壁 (quay wall)大型船 (貨物船・客船・フェリー) が直接接岸する高規格構造。 水深 4 m 以上の前面水域を持ち、垂直壁面を備える。本データに 80 件のみ (港湾 68 + 漁港 12) で少数
物揚場 (mono-age-ba)小型船・漁船が接岸して水揚げ・荷役する構造。 水深は浅く (1〜3 m)、岸壁より低規格。本データの主役 (689 件 / 56%)。 「もの (=漁獲・荷物) を揚げる場」が語源。
浮さん橋 (floating pier)フロート (浮き) の上に乗る桟橋。 潮位の上下動 (瀬戸内で 3 m 級) に追従するため、ガイド杭で水平位置を固定し垂直方向に動く。 本データに 370 件 (港湾 253 + 漁港 117)。漢字表記の「浮さん橋」は古い土木用語。
船揚場小型漁船・伝馬船を陸に引き揚げる傾斜面 (スリップウェイ)。 波打ち際の傾斜板で、エンジン故障時の引き揚げや干物乾燥に利用。 本データに 64 件。
さん橋 (pier)固定杭の上に板床を架けた桟橋。 浮さん橋と違い水位変化に追従せず、潮位差の少ない場所で旅客船・小型船バースとして使う。 本データに 6 件と少数。
係船くい港内に立てた1 本の杭 (or 数本の杭群)に船が直接ロープを取って係留する。 桟橋を作るほどの予算が無いか、一時係留用。本データに 13 件。
係船浮標 (mooring buoy)沖合に浮かべた大型ブイに船をつなぐ。 錨地 (anchorage) 代わりに使う簡易係留。本データに 2 件 (極少)。
係留線 総延長1 港の全係留施設の幾何長 (LineString length) の合計。 港の船舶受入容量を表す指標。バース数の代理指標としても解釈可能。
外郭から 500 m 以内本記事独自の「守られた係留」判定基準。 L32 で計算した外郭施設 (防波堤・突堤等) の任意点から 500 m 以内に位置する係留を 「外郭で守られた」とみなす。500m は港湾の典型的サイズ (港口幅 100-200m + 港内奥行き 200-300m) の概算上限。

研究の問い (RQ)

広島県内に整備された係留施設 (1224 件) は、 「港湾 27 港」「漁港 14 漁港」の 2 行政カテゴリでどう分布し、 どの構造形式船舶接岸・荷役・漁船係留を支えているか? L32 で示した外郭施設の防護網の内側に、係留はどう配置されているか?

  1. 港湾 vs 漁港 で施設数・延長・構造形式の構成比はどう違うか? L32 (外郭) との比較で何が見えるか?
  2. 主役構造は岸壁か物揚場か? L32 では「防波堤」が主役 (67%) だったが、係留では?
  3. 大型岸壁 (>200m) はどの港にどれだけ集中しているか?
  4. 浮さん橋は港湾と漁港のどちらに多いか? 設計選択の論理は?
  5. 外郭 (L32) と係留 (L33) の空間関係: 係留は外郭から 500 m 圏内に何 % あるか?
  6. 港の係留密度 (1 港あたり延長 / 港の物理サイズ) は港湾と漁港でどう違うか?

仮説 H1〜H6

到達点

2 dataset_id を「港湾 + 漁港」の相補的な 2 カテゴリとして読み解き、 1224 件の係留施設の地理分布・構造形式構成・延長分布・大型岸壁集中・外郭との 2 層関係を 統合分析する。これにより、広島県の係留整備が 「港湾は岸壁+物揚場+浮さん橋の混合」「漁港は物揚場主体の小規模分散」という カテゴリで分化した二相設計であり、かつ外郭施設の防護網の内側に階層的に配置されていることを実データで裏付ける。

本記事のスコープ外: 本記事は係留施設の地理構造に集中する。 維持管理状態 (補修履歴・劣化度)、施設の水深・構造強度取り扱い貨物量・漁獲量などは本記事では扱わず発展課題とする。

使用データ

本記事が使用する 2 dataset_id の一覧。完全に同一スキーマ (14 列) で、 カテゴリ列 事業 = 港湾 / 漁港 が二分の唯一の指標です。

dsidカテゴリ件数形式列数DoBoX
1251港湾802CSV (UTF-8 BOM)14#1251
1255漁港422CSV (UTF-8 BOM)14#1255

列スキーマ (両 dataset 共通)

列名意味
事業港湾 / 漁港
所管港湾 / 漁港 (=事業と同じ)
施設分類係留施設 (定数)
施設種類岸壁 / 物揚場 / 浮さん橋 / 船揚場 / さん橋 / 係船くい / 係船浮標 (港湾 7 種、漁港 5 種)
港湾名港または漁港の名前 (41 種、L32 と同集合)
事務所管理事務所 (6 種): 三原・広島港湾・呉・東広島・東部・廿日市
市区町村1/2市町名 (NaN がほとんど)
施設番号施設番号 (C-1-01 等の体系。C は係留系 = mooring/quay 略)
施設名称施設の固有名 (例: 第1物揚場、北防波堤岸壁)
管理者名等港湾管理者 / 漁港管理者 / 広島県 等
GIS情報WKT 形式の LineString または MultiLineString (経度・緯度)
開始位置緯度/経度WKT の起点の緯度経度

データ品質メモ

本記事の主要分析テーブル

2 dataset を縦結合した L33_all_facilities.csv (1060 行 × geom 有効分のみ) を主軸に、 各分析セクションでクロス集計と GIS 操作 (主に L32 との空間結合) を重ねる。

ダウンロード

生データ (DoBoX 直リンク)

中間データ (本記事生成 CSV)

図 (本記事生成 PNG)

再現用 Python スクリプト

L33_port_mooring.py を取得して プロジェクトルートで py -X utf8 lessons/L33_port_mooring.py を実行。 データが無ければ自動取得します (L32 の中間 CSV が lessons/assets/L32_all_facilities.csv に あれば外郭との空間関係も自動分析、無ければそのセクションのみスキップ)。

分析 1: 2 dataset の構造を可視化

狙い

「港湾」と「漁港」の 2 dataset が、件数・カバー範囲・構造形式構成で どう分化しているかを 1 枚の絵で示す。L32 (外郭) と比較し、係留固有の構造を識別する。

手法 (簡潔に)

L32 と全く同じ手順: 2 dataset を縦結合し、port_category 列 (港湾 / 漁港) で分けて 件数・港数・施設種類分布を集計。施設種類別件数を二系列バーで比較する。

実装

L33_port_mooring.py 行 1381–1419

 1
 2
 3
 4
 5
 6
 7
 8
 9
1390
1391
1392
1393
1394
1395
1396
SERIES = [
    (1251, "係留施設(港湾)", "港湾", "harbor_mooring_facility.csv",       32495),
    (1255, "係留施設(漁港)", "漁港", "fishing_port_mooring_facility.csv", 32499),
]
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)  # 全 1,224 行
pv_kind = pd.pivot_table(ALL, index="port_category", columns="施設種類",
                          values="施設番号", aggfunc="count", fill_value=0)

図と読み取り

なぜこの図か: 2 dataset の規模を文字 + バーで同時に伝える。 左 (カード) は「カテゴリ別の件数+港数+構造形式の内訳」をテキストで、 右 (バー) は「7 構造形式の絶対件数」を視覚化する。両方を 1 枚に置くことで 「カテゴリの規模差 (H1)」と「構造形式の意外な主役 (H2)」が同時に読める。

2 dataset の構造概観 — カードビュー (左) と構造形式比較 (右)
2 dataset の構造概観 — カードビュー (左) と構造形式比較 (右)

読み取り:

表と読み取り

施設種類 岸壁 物揚場 浮さん橋 船揚場 さん橋 係船くい 係船浮標 合計
port_category
港湾 68 425 253 36 5 13 2 802
漁港 12 264 117 28 1 0 0 422
合計 80 689 370 64 6 13 2 1224

読み取り: 構造形式 7 種のうち、港湾と漁港の両方に多数あるのは「物揚場」「浮さん橋」「岸壁」「船揚場」。 「係船くい」「さん橋」「係船浮標」は港湾固有 (漁港にはほぼ無い)。 これは漁港側の構造選択が「物揚場主体 + 補助的な浮さん橋・船揚場」に絞られていることを示す。

分析 2: 構造形式の構成比と延長

狙い

構造形式の比率を件数延長 (km)の 2 ベースで比較する。 「件数では多いが延長では少ない」のような構造形式 (例: 短い物揚場が多数) を識別する。

手法 (リテラシレベル解説)

WKT (Well-Known Text) とは、点・線・ポリゴンなどの幾何形状を 人間が読める文字列で表現する標準形式です。例:

LINESTRING (132.75588 34.18490, 132.75582 34.18484)

これを Python の shapely.wkt.loads()幾何オブジェクトに変換し、 geometry.length でメートル単位の延長を計算します。 ただし緯度経度のままだと度単位になってしまうので、まず EPSG:6671 (平面直角座標系 第 III 系、広島県を含む)に再投影します。

実装

L33_port_mooring.py 行 1454–1480

 1
 2
 3
 4
 5
 6
 7
 8
 9
1463
1464
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

図と読み取り

なぜこの図か: 件数構成比だけでは「小さな施設が多数」のような 構造を見落とす。延長ベースを併置することで「実際のバース総長としての貢献」が読める。

構造形式の構成比 — 件数ベース (左) と延長ベース (右)
構造形式の構成比 — 件数ベース (左) と延長ベース (右)

読み取り:

表と読み取り

施設種類 岸壁 物揚場 浮さん橋 船揚場 さん橋 係船くい 係船浮標 合計km
port_category
港湾 12.82 25.19 35.02 1.31 0.20 0.0 0.0 74.54
漁港 1.52 10.27 16.64 0.63 0.09 0.0 0.0 29.15
合計 14.34 35.46 51.66 1.94 0.29 0.0 0.0 103.69

読み取り:

分析 3: 港別ランキングと上位集中

狙い

「どの港が係留容量をどれだけ持つか」を件数・延長の 2 軸で順位付け。 H4 (上位港集中) を検証し、広島県の港湾整備の地理偏在を視覚化する。

手法

港湾名 + カテゴリでグループ集計。施設数・総延長・構造形式種類数を取り、 延長で降順ソート。上位 15 港を 2 軸バーで比較。

実装

L33_port_mooring.py 行 221–239

221
222
223
224
225
226
227
port_agg = gdf.groupby(["port_category", "港湾名"]).agg(
    n_facilities=("length_m", "size"),
    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)

図と読み取り

なぜこの図か: 件数だけだと「小さい施設多数の港」が上位、延長だけだと 「大型施設少数の港」が上位になる。両方を並べることで両ベクトルの整合・不整合が読める。

係留施設 上位 15 港 — 件数 (左) と総延長 (右)
係留施設 上位 15 港 — 件数 (左) と総延長 (右)

読み取り:

表と読み取り (上位 10 港)

port_category 港湾名 n_facilities total_length_m n_kinds total_length_km
港湾 広島港 105 24846.316905 6 24.846
港湾 尾道糸崎港 94 10036.048672 6 10.036
漁港 五日市 15 9198.524870 3 9.199
港湾 福山港 29 5188.599367 4 5.189
漁港 豊島 95 4551.044903 4 4.551
港湾 鮴崎港 33 3364.298254 4 3.364
港湾 蒲刈港 58 2920.484540 4 2.920
港湾 土生港 30 2641.380561 3 2.641
港湾 御手洗港 24 2507.895549 4 2.508
港湾 瀬戸田港 22 2398.414425 3 2.398

カテゴリ別の上位集中 (H4 検証)

カテゴリ上位 N 港件数 / カテゴリ計シェア (%)
港湾上位 5 (広島港, 尾道糸崎港, 福山港, 鮴崎港, 蒲刈港) 319 / 691 46.2%
漁港上位 3 (五日市, 豊島, 倉橋) 142 / 369 38.5%

読み取り: 港湾上位 5 で 46%、漁港上位 3 で 38% を占有。 H4 を 部分支持。整備は「ごく少数の大規模港 + 多数の小規模港」のべき分布で、 これは商業性 (港湾) も漁業集積度 (漁港) も同じ偏在を示す。L32 (外郭) でも同じパターンだった。

分析 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
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=(14, 8))
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=2.5)

図と読み取り — 県全域

なぜこの図か: 県全域に対する係留線の分布密度を、青 (港湾) と緑 (漁港) で 直接見ることで「どこに何カテゴリが集中しているか」を一目で把握できる。 個別の港名ラベルで上位 10 港を識別。

広島県 係留施設マップ — 全 1060 件をカテゴリで色分け、上位 10 港にラベル
広島県 係留施設マップ — 全 1060 件をカテゴリで色分け、上位 10 港にラベル

読み取り:

図と読み取り — 構造形式 small multiples

なぜこの図か: 県全域マップでは構造形式の偏在が見えない。 7 形式を別パネルにすることで「物揚場は全域、岸壁は商業港のみ」のような 形式ごとの地理パターンが分離して見える。

構造形式 7 種別 small multiples — それぞれの偏在パターン
構造形式 7 種別 small multiples — それぞれの偏在パターン

読み取り:

分析 5: 上位 4 港の詳細マップ — 係留パターンの 3 類型

狙い

上位 4 港 (広島港, 尾道糸崎港, 五日市, 豊島) の詳細マップを並べ、 各港の係留配置パターンを 1 港ずつ精読する。 「少数事例を深く掘る」アプローチで、港の機能・歴史・地形が係留設計にどう反映されているかを読む。

手法

各港について bbox を取り、施設のみを zoom 表示。 構造形式ごとに別色で重ねることで、岸壁・物揚場・浮さん橋の位置関係が読める。

実装

L33_port_mooring.py 行 703–733

 1
 2
 3
 4
 5
 6
 7
 8
 9
712
713
714
715
top_h_ports = port_agg[port_agg["port_category"]=="港湾"].head(2)["港湾名"].tolist()
top_f_ports = port_agg[port_agg["port_category"]=="漁港"].head(2)["港湾名"].tolist()
detail_ports = [(p, "港湾") for p in top_h_ports] + [(p, "漁港") for p in top_f_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 港単位で読める。

上位 4 港の詳細マップ — 構造形式色分け
上位 4 港の詳細マップ — 構造形式色分け

読み取り — 1 港ずつ:

係留パターンの 3 類型 (発見): 上位 4 港の比較から、係留施設の組み合わせは 少なくとも以下 3 つのパターンに分類できる:
  1. 多形式共存型 (広島港型): 大型商業港。岸壁 + 物揚場 + 浮さん橋 + 係船くい などが共存。 複数船種 (フェリー・貨物・客船・小型船) を 1 港で受け入れる。
  2. 長大岸壁型 (福山港型): 工業港湾。長大岸壁が中心、補助的に物揚場。 鉄鋼・機械・コンテナの大型船バースに特化。
  3. 物揚場集中型 (倉橋・豊島型): 漁港。物揚場が圧倒的、岸壁は中型 1-2 本のみ。 小型漁船の水揚げ・荷役に特化。
これらは港の機能 (商業 / 工業 / 漁業) と規模 (大規模商業港 / 集落漁港) の積で決まる。 L32 で示した「港湾は防波堤主体・漁港は防波堤+護岸」という外郭の二相設計と整合する係留設計。

分析 6: 延長分布の 4 視点解析

狙い

係留施設の延長分布を多角的に観察し、H2 (物揚場主役)・H4 (上位港集中)・H5 (大型岸壁集中) を統計的に検証する。

手法 (リテラシレベル解説)

4 つの可視化手法を統合する:

実装

L33_port_mooring.py 行 1724–1750

 1
 2
 3
 4
 5
 6
 7
 8
 9
1733
1734
# 物揚場プロファイル
mp_per_port = gdf[gdf["施設種類"]=="物揚場"].groupby(["port_category", "港湾名"]).agg(
    n=("length_m", "size"),
    mean_m=("length_m", "mean"),
    total_m=("length_m", "sum"),
).reset_index()

# 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

図と読み取り

なぜこの図か: 4 視点を 2x2 で並べることで、分布形状・分散・集中・港単位プロファイルを 1 枚に統合できる。これは多角的データを 1 セクションで深く掘るための定石レイアウト。

延長分布 4 視点 — 岸壁ヒスト、boxplot、Lorenz、物揚場散布図
延長分布 4 視点 — 岸壁ヒスト、boxplot、Lorenz、物揚場散布図

読み取り (左上 — 岸壁ヒストグラム):

読み取り (右上 — 構造形式 Boxplot):

読み取り (左下 — Lorenz 曲線):

読み取り (右下 — 物揚場プロファイル散布図):

分析 7: 大型岸壁 (≥200m) の集中分析

狙い

大型岸壁 (≥ 200 m) は商業貨物受入の戦略的バース。 どの港にどれだけ集中しているかを地図と表で示し、H5 を検証する。

手法 (リテラシレベル解説)

条件抽出 + 地図プロットのシンプルな手順だが、 「200 m」という閾値の根拠が研究的に重要:

実装

L33_port_mooring.py 行 274–295

274
275
276
277
278
279
280
281
LARGE_QUAY_THRESH = 200.0  # m
quays = gdf[gdf["施設種類"] == "岸壁"].copy()
quays_large = quays[quays["length_m"] >= LARGE_QUAY_THRESH].copy()
quays_large_pv = quays_large.groupby(["port_category", "港湾名"]).agg(
    n=("length_m", "size"),
    total_m=("length_m", "sum"),
    max_m=("length_m", "max"),
).reset_index().sort_values("total_m", ascending=False)

図と読み取り

なぜこの図か: 大型岸壁は数が少ない (25 本) ので、 1 本ずつ位置と長さをラベル付きで示す。中型岸壁 (100-200m) を黄色、 大型岸壁 (≥200m) を赤、その他全係留を背景灰で表示することで階層が見える。

大型岸壁 (≥200 m) の地理分布
大型岸壁 (≥200 m) の地理分布

読み取り:

表と読み取り — 大型岸壁の港別内訳

port_category 港湾名 n total_m max_m
港湾 広島港 10 4755.770822 748.050710
港湾 福山港 5 1768.396082 448.912357
港湾 大竹港 4 1133.698446 324.784429
港湾 尾道糸崎港 3 1126.192049 469.317408
漁港 草津 2 600.357111 400.327577
漁港 豊島 1 243.363129 243.363129

読み取り: 上位 3 港 (広島港, 福山港, 大竹港) で 大型岸壁の 76% を占有。 これらは広島県の商業海運の戦略的拠点であり、 県内貨物量・船舶往来数・経済規模との対応関係が想定される (発展課題 Z3)。

分析 8: 外郭 (L32) と係留 (L33) の 2 層関係

狙い

L32 で示した外郭施設 (防波堤・突堤等) と本記事の係留施設の空間関係を分析する。 仮説: 係留は外郭で守られた港内に配置されるはず。「裸の係留 (外郭から遠い)」はあるか?

手法 (リテラシレベル解説)

距離計算 + 閾値判定:

  1. 外郭施設を 1 つの巨大な MultiLineString に統合 (union_all())。 これにより距離計算が高速化される (1 vs 1 の距離計算で済む)。
  2. 各係留施設の中心点から外郭への最近距離geometry.distance() で計算。
  3. 500 m 以内を「守られた係留」と判定。

500 m の根拠: 港湾の典型サイズ (港口幅 100-200m + 港内奥行き 200-300m) の概算上限。これより遠いと「同一港の外郭で守られている」とは言えない。

実装

L33_port_mooring.py 行 1862–1889

 1
 2
 3
 4
 5
 6
 7
 8
 9
1871
1872
l32 = pd.read_csv("lessons/assets/L32_all_facilities.csv", encoding="utf-8-sig")
l32["geometry"] = l32["GIS情報"].apply(parse_wkt)
l32_gdf = gpd.GeoDataFrame(l32.dropna(subset=["geometry"]),
                           geometry="geometry", crs="EPSG:4326").to_crs("EPSG:6671")

# 外郭施設を 1 つの巨大 MultiLineString に統合 (高速化)
outer_diss = l32_gdf.geometry.union_all()

# 各係留 → 外郭 への最近距離
gdf["dist_to_outer_m"] = gdf.geometry.distance(outer_diss)
gdf["near_outer"] = gdf["dist_to_outer_m"] <= 500.0  # 500m 圏

図と読み取り

なぜこの図か: 県全域 (左) と広島港ズーム (右) の 2 視点。 県全域では外郭(紫)+守られた係留(青)+裸の係留(赤)の 3 層が一目で見える。 広島港ズームで個別の港内構造を精査できる。

外郭 (L32) と係留 (L33) の 2 層関係マップ
外郭 (L32) と係留 (L33) の 2 層関係マップ

読み取り:

解釈の注意: 「500m 圏内」 = 「物理的に近い」だけで、 実際の防護機能は外郭の高さ・港の地形・想定波高に依存する。 本分析は階層配置の位置検証であり、機能評価ではない。 本格的な防護評価は外郭高さ × 港の方位 × 想定波の 3 軸で別途行う必要がある (発展課題 Z3)。

仮説検証と考察

H1〜H6 の検証結果を 1 表で示す。

H claim result verdict
H1 港湾 ≥ 漁港、外郭 (1.33:1) より港湾優位が強い (1.8x+)、延長は 2 倍以上 港湾=802 (65.5%), 漁港=422 (34.5%), 延長 港湾=74.54 km / 漁港=29.15 km, 比 2.56x 支持
H2 岸壁 < 10%、主役は物揚場 (50%+) 岸壁 6.5% (80件) / 物揚場 56.3% (689件) 支持
H3 浮さん橋: 港湾 > 漁港 港湾 253 件 (31.5%) vs 漁港 117 件 (27.7%) 支持
H4 港湾上位 5 港で 50%+、漁港上位 3 漁港で 50%+ 港湾上位 5: 46.2% / 漁港上位 3: 38.5% 部分支持
H5 200m 超岸壁は広島港・福山港・尾道糸崎港の 3 大商業港に集中 大型岸壁 25 件 / 該当港 ['広島港', '福山港', '大竹港', '尾道糸崎港', '草津', '豊島'] / 3 大商業港 (3 港マッチ) 支持
H6 係留 80%+ が L32 外郭から 500m 圏内 全体 88.8% (港湾 85.5%, 漁港 94.9%) 支持

機能グルーピング (4 機能で集約)

7 構造形式を物理機能で 4 グループに集約すると:

機能含む構造合計港湾漁港
大型船バース岸壁80 (6.5%)6812
小型船・荷役物揚場, 船揚場753 (61.5%)461292
桟橋系浮さん橋, さん橋376 (30.7%)258118
杭・浮標係船くい, 係船浮標15 (1.2%)150
機能別マップ (左) + 港湾 vs 漁港 機能構成比 (右)
機能別マップ (左) + 港湾 vs 漁港 機能構成比 (右)

読み取り:

総括: 広島県の係留整備思想

2 dataset から再構成した係留施設の構造分析により、以下の3 つの設計思想が読み取れる。

本記事は「係留施設は港の生産機能の核」という視点を実データで裏付けた。 1224 件の係留が、2 つの法的カテゴリで 41 港の船舶受入容量を形成し、 L32 で示した外郭施設の防護網の内側に階層配置されている。 この網の幾何構造を理解することは、港湾の物流・漁業・防災の総合分析の出発点である。

2 港の比較で見る係留思想 (=本記事タイトルの問いに答える)

2 件のデータが「2 港分」ではなく「2 行政カテゴリ分」だったため、 本記事は「広島港 vs 福山港」のような 2 港比較ではなく、 「港湾 vs 漁港」の二相比較 + 上位 4 港の精読を主題とした。これにより 27 + 14 = 41 港の俯瞰が可能になり、研究的により価値ある分析になった。

具体的な係留思想の相違:

港湾 (商業港)漁港 (漁業基地)
主役構造 (件数)物揚場 (53%) + 浮さん橋 (32%) 物揚場 (63%) + 浮さん橋 (28%)
主役構造 (延長)岸壁 (17%) + 物揚場 (34%) 物揚場 (35%) + 岸壁 (5%)
岸壁 1 本サイズ中央値 182 m (大型化)中央値 101 m (中型のみ)
大型岸壁 (≥200m)22 本3 本
カテゴリ計延長74.5 km29.1 km
船種大型貨物・客船・フェリー・小型船漁船 + 小型レジャーボート
地理湾奥・主要市街地・島嶼商業港島嶼 + 沿岸集落
外郭から500m圏内率85.5%94.9%

発展課題

結果 X1 → 新仮説 Y1 → 課題 Z1: 維持管理状態と岸壁劣化リスク

結果 X2 → 新仮説 Y2 → 課題 Z2: 外郭整備時期と係留整備時期の時系列順序

結果 X3 → 新仮説 Y3 → 課題 Z3: 大型岸壁と貨物量・船舶往来の対応

結果 X4 → 新仮説 Y4 → 課題 Z4: 浮さん橋の潮位対応の真の必要性検証

結果 X5 → 新仮説 Y5 → 課題 Z5: 物揚場の規格化 (中央値 45m vs 18m) の歴史的起源