Lesson 34

臨港交通施設 2 件統合分析 — 広島県 24 港湾 + 7 漁港の 296 道路・橋・駐車場が描く港湾アクセス第 3 層

臨港交通GIS港湾漁港geopandasPOLYGON道路駐車場3 層階層
所要 40 分 / 想定レベル: リテラシ / データ: DoBoX 臨港交通施設 2 dataset (1252 港湾, 1256 漁港)

データ取得手順

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

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

実行コマンド:

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

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

学習目標と問い

カバー宣言: 本記事は DoBoX のシリーズ 「臨港交通施設_港湾/漁港」 2 件 (dataset_id = 1252, 1256) を統合し、広島県内における港湾アクセス交通インフラ (港湾道路・港湾橋・港湾駐車場) の陸海接続構造を分析する研究記事です。 L32 (外郭施設) と L33 (係留施設) の続編として、 港湾施設の3 層階層 (外郭→係留→臨港交通) の最後の層を扱います。

シリーズ構造判定: (a) 行政カテゴリ分割型 + (b) 整備格差型のハイブリッド

このシリーズの 2 件は、L32/L33 と同様「港湾」「漁港」の 2 行政カテゴリで 分割される相補型構造ですが、L32/L33 とは決定的に違う点があります。

すなわち L34 は「整備された港のみが入っているサブセット型」であり、 これ自体が研究的に重要な発見です。「外郭+係留はあるが臨港交通はない港」とは何か? これらの港は独立した港湾道路を持たず、既存の集落道路・市道に依存していると推察されます。

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

用語定義
臨港交通施設港湾区域・漁港区域に整備された陸上交通インフラの総称。 本データでは「道路-車道」「駐車場」「橋りょう」の 3 種を含む。 港湾の海側 (外郭) と内側 (係留) ではなく、係留の陸側にある第 3 層インフラ。
道路-車道港湾区域内に管理者が整備した港湾道路。 一般市道とは別途、港湾管理者 (広島県) が占用許可を出して整備・維持する。 本データに 184 件 (港湾 172 + 漁港 12)。 POLYGON (面) として記録され、道路の幅 × 長さの 2 次元範囲を保持。
駐車場港湾区域内の船客・荷主・職員用駐車場。 フェリー・客船利用者の自家用車置き場、貨物運送の待機場、港湾労働者の通勤駐車場など。 本データに 93 件港湾のみ (93 件) で漁港にはゼロ。 これは「漁港利用者は徒歩・近隣駐車・漁協車両のみ」という機能差を反映。
橋りょう港湾区域内に整備された短い橋 (陸地と桟橋を繋ぐ橋、 水路を跨ぐ連絡橋など)。一般道路橋とは別途、港湾管理者が整備。 本データに 19 件GIS 欠損率が極めて高い (全 19 件中 15 件が GIS 無)。
整備格差本記事独自概念。「外郭+係留はあるが、臨港交通はない」港の存在。 広島県では10 港 (24%) が L34 未整備。 これらは独立した港湾道路を持たず、既存の市道・町道・集落道路をそのまま利用している港。
3 層階層L32 (外郭) → L33 (係留) → L34 (臨港交通) の港湾施設の階層。 外洋から陸地に向かう設計順序。波を外郭で遮り、係留で船を泊め、交通で陸へ繋ぐ。 本記事はこの 3 層が空間的に同心円状に重なることを実証する。
岸壁直結本記事独自の判定基準。臨港交通施設 (POLYGON) の境界から L33 係留施設 (LineString) への最近距離が 100 m 以内のもの。 これは岸壁に船が泊まり、すぐ後ろの道路で貨物が運ばれるという陸海直結の物理的指標。
POLYGON 面積L32/L33 が LineString (線) で延長を計算するのに対し、 L34 は POLYGON (面) で面積 (m² / ha)を計算する。これは 道路や駐車場が「線ではなく幅広な面で整備される」という現実を反映した記録方式。

研究の問い (RQ)

広島県の臨港交通施設 (296 件) は、L32/L33 で同定された 41 港集合のうち どれだけの港にしか整備されていないか? 整備された 31 港では、 道路・橋・駐車場がどんな構成で陸海接続を支え、 L32 外郭・L33 係留と空間的にどう重なるのか?

  1. 整備済み港は何港か? 整備格差 (L32/L33 にあって L34 にない港) はどれくらいあるか?
  2. 施設種類 (道路 / 駐車場 / 橋) はカテゴリ別にどう分布し、駐車場は港湾のみか?
  3. 件数規模差は? L32 (1.33:1)、L33 (1.9:1) と比べて港湾偏重はどれくらい強いか?
  4. 大規模商業港 (広島港・福山港・尾道糸崎港) は道路面積でも他を引き離すか?
  5. GIS 情報の欠損パターン (なぜ橋は欠損が多いか?)
  6. 臨港交通の道路は L33 係留から 100m 圏内に何 % か (岸壁直結)?
  7. 3 層比 (外郭 : 係留 : 交通) はどれくらいの数比か?

仮説 H1〜H7

到達点

2 dataset_id を「港湾 + 漁港」の相補的な 2 カテゴリとして読み解き、 296 件の臨港交通施設の地理分布・施設種類構成・面積分布・整備格差・ L32 外郭・L33 係留との 3 層階層関係を統合分析する。これにより、 広島県の港湾交通整備が 「外郭で守り、係留で泊め、交通で陸へ繋ぐ」3 層階層設計であり、 かつ整備された港湾の中でもさらに大規模商業港に強く偏在していることを実データで裏付ける。 さらに、「臨港交通なし」の 10 港の存在自体が港湾整備の階層性を逆照射する。

本記事のスコープ外: 本記事は臨港交通の地理構造に集中する。 道路の舗装種別・幅員・通行制限、駐車場の収容台数・料金、 橋の桁長・架設年・耐荷重、貨物量・通行台数などは 本記事では扱わず発展課題とする。

使用データ

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

dsidカテゴリ件数形式列数DoBoX
1252港湾278CSV (UTF-8 BOM)14#1252
1256漁港18CSV (UTF-8 BOM)14#1256

列スキーマ (両 dataset 共通)

列名意味
事業港湾 / 漁港
所管港湾 / 漁港 (=事業と同じ)
施設分類臨港交通施設 (定数)
施設種類道路-車道 / 駐車場 / 橋りょう (港湾 3 種、漁港 2 種)
港湾名港または漁港の名前 (31 種、L33 41 港の部分集合)
事務所管理事務所 (例: 三原支所、広島港湾振興事務所、呉支所等)
市区町村1/2市町名 (NaN がほとんど)
施設番号施設番号 (D-1-3 等の体系。D は道路系 = Road の D ではなく、港湾整備事業区分 D)
施設名称施設の固有名 (例: 宇和部北臨港道路、小用桟橋駐車場)
管理者名等広島県 / NaN 等
GIS情報WKT 形式の POLYGON (経度・緯度)、欠損が多い
開始位置緯度/経度POLYGON の起点の緯度経度

L32/L33 との重要な相違

L32 外郭L33 係留L34 臨港交通
件数 (港湾+漁港)480 + 362 = 842802 + 422 = 1,224 278 + 18 = 296
カバー港数27 + 14 = 4127 + 14 = 41 24 + 7 = 31 (差 10 港)
件数比 港:漁1.33:11.9:1 15.4:1 (最大偏重)
GIS 形式LINESTRING (線)LINESTRING (線) POLYGON (面)
主要指標延長 m延長 m面積 m²
GIS 有効率~99% (ほぼ完備)~98% (ほぼ完備) 22% (大量欠損)

データ品質メモ

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

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

ダウンロード

生データ (DoBoX 直リンク)

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

図 (本記事生成 PNG)

再現用 Python スクリプト

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

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

狙い

「港湾」「漁港」の 2 dataset が、件数・カバー範囲・施設種類構成でどう分化しているかを 1 枚の絵で示す。L32/L33 と比較し、臨港交通固有の極端な偏重を識別する。

手法 (簡潔に)

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

実装

L34_port_traffic.py 行 107–145

 1
 2
 3
 4
 5
 6
 7
 8
 9
116
117
118
119
120
121
122
SERIES = [
    (1252, "臨港交通施設(港湾)", "港湾", "harbor_traffic_facility.csv",       32496),
    (1256, "臨港交通施設(漁港)", "漁港", "fishing_port_traffic_facility.csv", 32500),
]
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)  # 全 296 行
pv_kind = pd.pivot_table(ALL, index="port_category", columns="施設種類",
                         values="施設番号", aggfunc="count", fill_value=0)

図と読み取り

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

2 dataset の構造概観 — カードビュー (左) と施設種類比較 (右)
2 dataset の構造概観 — カードビュー (左) と施設種類比較 (右)

読み取り:

表と読み取り (件数クロス)

施設種類 道路-車道 駐車場 橋りょう 合計
port_category
港湾 172 93 13 278
漁港 12 0 6 18
合計 184 93 19 296

読み取り: 道路-車道は港湾・漁港両方に多数あり、橋りょうは両方に少数あるが、 駐車場は港湾のみ。漁港の施設構成は「道路 + 橋」の 2 機能に絞られ、 旅客機能 (駐車場) を持たない。これは漁港 = 漁業者専用 + 集落道路で代替という運用思想の現れ。

表と読み取り (面積クロス)

施設種類 道路-車道 駐車場 橋りょう 合計ha
port_category
港湾 97.941 5.114 5.084 108.139
漁港 0.220 0.000 0.000 0.220
合計 98.161 5.114 5.084 108.359

読み取り:

分析 2: 整備格差と 3 層構造 — どの港が 3 層揃うか

狙い

L34 のシリーズ構造はL32/L33 と異なる — 同じ 41 港集合のうち 整備済の港のサブセットのみが入っている。 どの港が整備済み / 未整備かを特定し、「整備格差」の地理を読む。

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

集合演算 (差集合): 単純な 2 集合の差を取る:

実装

L34_port_traffic.py 行 1587–1630

1587
1588
1589
1590
1591
1592
l33 = pd.read_csv("lessons/assets/L33_all_facilities.csv", encoding="utf-8-sig")
ports_l33_h = set(l33[l33["port_category"]=="港湾"]["港湾名"].unique())
ports_l34_h = set(ALL[ALL["port_category"]=="港湾"]["港湾名"].unique())

only_l33_h = ports_l33_h - ports_l34_h  # L34 未整備の港湾
both_h = ports_l33_h & ports_l34_h      # 全層整備の港湾

表と読み取り

カテゴリL32/L33 港数L34 整備済みL34 未整備未整備の港名
港湾2724 3 港中浜港, 佐木港, 重井港
漁港147 7 漁港五日市, 地御前, 安浦, 横田, 沖浦, 箱崎, 音戸
合計4131 10 港 (24.4%)

読み取り:

図と読み取り — 3 層件数ヒートマップ

なぜこの図か: 港ごとの 3 層 (外郭/係留/交通) 件数を 1 表で並べ、 「どの港が全層豊富か」「交通だけ薄い港はどこか」を視覚的に発見できる。 ヒートマップ (左) で全体像、スタックバー (右) で 3 層比率を見る。

上位 25 港の 3 層件数ヒートマップ + 上位 15 港の 3 層スタックバー
上位 25 港の 3 層件数ヒートマップ + 上位 15 港の 3 層スタックバー

読み取り:

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

狙い

整備済 31 港の中で「どこが交通施設を最も豊富に持つか」を 件数・面積の 2 軸で順位付け。H4 (上位港集中) を検証。

手法

港湾名 + カテゴリでグループ集計。施設数・総面積 (POLYGON 面積、ha 単位) を取り、 件数で降順ソート。上位 15 港を 2 軸バーで比較。

実装

L34_port_traffic.py 行 1644–1665

1644
1645
1646
1647
1648
1649
1650
1651
port_agg = ALL.groupby(["port_category", "港湾名"]).size().reset_index(name="n_facilities")
area_agg = gdf.groupby(["port_category", "港湾名"]).agg(
    total_area_m2=("area_m2", "sum"),
    n_with_geom=("area_m2", "size"),
).reset_index()
port_agg = port_agg.merge(area_agg, on=["port_category", "港湾名"], how="left")
port_agg["total_area_ha"] = port_agg["total_area_m2"].fillna(0) / 10000
port_agg = port_agg.sort_values("n_facilities", ascending=False)

図と読み取り

なぜこの図か: 件数だけでは「小さい施設多数の港」が上位、面積だけでは 「大型 1 件の港」が上位になる。両方を並べることで両ベクトルの整合・不整合が読める。 特に L34 は GIS 欠損が多いので、面積はサンプル分のみ。

臨港交通施設 上位 15 港 — 件数 (左) と総面積 (右、GIS有のみ)
臨港交通施設 上位 15 港 — 件数 (左) と総面積 (右、GIS有のみ)

読み取り:

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

port_category 港湾名 n_facilities total_area_m2 n_with_geom total_area_ha
港湾 広島港 79 824383.692942 33 82.438
港湾 尾道糸崎港 39 91434.004506 11 9.143
港湾 福山港 21 127192.763246 5 12.719
港湾 小用港 19 10941.032042 3 1.094
港湾 蒲刈港 15 0.000000 0 0.000
港湾 中田港 11 4896.258169 2 0.490
港湾 大竹港 8 7313.238248 1 0.731
港湾 大西港 8 0.000000 0 0.000
港湾 御手洗港 8 0.000000 0 0.000
港湾 竹原港 8 5133.611464 2 0.513

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

カテゴリ上位 N 港件数 / カテゴリ計シェア (%)
港湾上位 3 (広島港, 尾道糸崎港, 福山港) 139 / 278 50.0%
港湾上位 5 173 / 278 62.2%
漁港上位 3 13 / 18 72.2%

読み取り: 港湾上位 3 で全体の 50%。 これは L32 (44%)・L33 (46%) より強い集中。 道路網は商業ハブ港でしか面的に整備されないという法則の数値的裏付け。

分析 4: 県全域マップで臨港交通分布を観る

狙い

件数や面積だけでは見えない地理偏在を、県全域の POLYGON マップで一望する。 瀬戸内海岸 + 主要島嶼のどこに臨港交通が密集し、どこが手薄かを可視化。

手法

WKT パース済 GeoDataFrame を EPSG:6671 (平面直角 III 系) に投影し、 geopandas.plot()面塗り。 L33 (LineString = 線で描画) と違い、L34 は POLYGON で面で描画するため、 広域マップでは小さな道路 POLYGON が点状に見えることに注意。 県全域 polygon (L15 admin_922) を背景に、カテゴリ・施設種類で色分け。

実装

1
2
3
4
5
6
7
8
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))
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, edgecolor=color, alpha=0.7, linewidth=0.6)

図と読み取り — 県全域

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

広島県 臨港交通施設マップ — GIS 有 65 件をカテゴリで色分け
広島県 臨港交通施設マップ — GIS 有 65 件をカテゴリで色分け

読み取り:

図と読み取り — 施設種類 small multiples

なぜこの図か: 県全域マップでは施設種類の偏在が見えない。 3 種を別パネルにすることで「道路は全域、駐車場は港湾のみ、橋は極稀」のような 形式ごとの地理パターンが分離して見える。

施設種類 3 種別 small multiples — それぞれの偏在パターン
施設種類 3 種別 small multiples — それぞれの偏在パターン

読み取り:

分析 5: 上位 4 港の 3 層重ね詳細マップ — 階層配置の発見

狙い

上位 4 港 (広島港, 尾道糸崎港, 福山港, 走) の3 層重ね詳細マップを並べ、 各港で外郭 (紫線) + 係留 (青線) + 交通 (種類色塗り)がどう配置されているかを精読する。 本記事の主役分析。

手法

各港について bbox を取り、L32 外郭 + L33 係留 + L34 交通 の 3 レイヤを同一座標系で重ね描画。 これにより「外郭で守られた港内に係留が並び、その背後に道路と駐車場」という階層が 1 枚の絵で読める。

実装

L34_port_traffic.py 行 1804–1827

1804
1805
1806
1807
1808
1809
1810
1811
1812
# 3 層重ね描画
l32_local = l32_gdf.cx[bbox[0]-pad:bbox[2]+pad, bbox[1]-pad:bbox[3]+pad]
l33_local = l33_gdf.cx[bbox[0]-pad:bbox[2]+pad, bbox[1]-pad:bbox[3]+pad]

l32_local.plot(ax=ax, color="#9467bd", linewidth=2.0)  # 紫: 外郭 (線)
l33_local.plot(ax=ax, color="#0969da", linewidth=2.0)  # 青: 係留 (線)
for k in KIND_ORDER:
    sk = sub[sub["施設種類"] == k]
    sk.plot(ax=ax, color=KIND_COLOR[k], alpha=0.85)  # 色: 交通 (面)

図と読み取り

なぜこの図か: 3 層を別々に見るのではなく同じ地図上に重ねることで、 階層関係 (外郭 → 係留 → 交通) が空間的にどう同心円配置されているかが直感的に読める。 これが本記事の最大の発見ポイント。

上位 4 港の 3 層重ね詳細マップ — 紫:外郭 青:係留 色:交通
上位 4 港の 3 層重ね詳細マップ — 紫:外郭 青:係留 色:交通

読み取り — 1 港ずつ:

3 層配置の階層パターン (発見): 上位 4 港の比較から、 3 層の空間配置パターンは少なくとも以下 3 つに分類できる:
  1. 同心円型 (広島港型): 外側 (外洋) → 外郭 → 係留 → 交通 → 内側 (陸地) と 同心円状に階層配置。総合港湾の標準形。
  2. 群島分散型 (尾道糸崎型): 各島に小さな 3 層セットが分散配置。 1 つ 1 つは小さいが、群として大規模港湾と同等の機能を持つ。
  3. 係留偏重型 (倉橋型): 係留が圧倒的多数だが、交通はほぼゼロ。 陸への接続は集落道路に依存する漁港特有のパターン。 これが H1 (整備格差) の物理的実態。
これらは港の機能 (商業 / 漁業) と地形 (本土 / 群島) の積で決まる。

分析 6: 面積分布の 4 視点解析

狙い

臨港交通施設の面積分布を多角的に観察し、施設種類ごとの 標準サイズ・港間集中度・駐車場プロファイルを統計的に検証する。

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

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

実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# POLYGON 面積を計算 (EPSG:6671 で m² 単位)
gdf["area_m2"] = gdf.geometry.area

# 駐車場プロファイル
park_per_port = gdf[gdf["施設種類"]=="駐車場"].groupby(["port_category", "港湾名"]).agg(
    n=("area_m2", "size"),
    mean_m2=("area_m2", "mean"),
    total_m2=("area_m2", "sum"),
).reset_index()

# Lorenz 曲線
sorted_ports = port_agg.sort_values("total_area_ha", ascending=False)
sorted_ports["cum_pct"] = sorted_ports["total_area_ha"].cumsum() / sorted_ports["total_area_ha"].sum() * 100

図と読み取り

なぜこの図か: 4 視点を 2x2 で並べることで、分布形状・分散・集中・港単位プロファイルを 1 枚に統合できる。

面積分布 4 視点 — boxplot、ヒスト、Lorenz、駐車場散布図
面積分布 4 視点 — boxplot、ヒスト、Lorenz、駐車場散布図

読み取り (左上 — 種類別 boxplot):

読み取り (右上 — 道路 vs 駐車場 ヒスト):

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

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

分析 7: GIS 欠損パターン分析 — データ整備優先度の発見

狙い

L34 のGIS 欠損率 78% は L32 (~1%)・L33 (~2%) と比べて異常に高い。 この欠損が「ランダム」「構造的偏り」かを判定する。 構造的偏りなら、データ整備の優先度・歴史的経緯が読めるはず。

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

2 軸クロス集計 + ヒートマップ:

  1. カテゴリ × 施設種類で欠損率を計算。
  2. ヒートマップで「どこが欠損集中か」を視覚化。
  3. 港別の欠損率もバーで並べ、整備差が「種類差」か「港差」かを切り分け。

実装

L34_port_traffic.py 行 216–242

 1
 2
 3
 4
 5
 6
 7
 8
 9
225
226
gis_pattern = ALL.groupby(["port_category", "施設種類"]).agg(
    n_total=("GIS情報", "size"),
    n_with_gis=("GIS情報", lambda x: x.notna().sum()),
).reset_index()
gis_pattern["欠損率(%)"] = (1 - gis_pattern["n_with_gis"] / gis_pattern["n_total"]) * 100

# 港別の欠損率
gis_per_port = ALL.groupby(["port_category", "港湾名"]).apply(
    lambda x: pd.Series({{"n_total": len(x), "n_missing": x["GIS情報"].isna().sum()}})
).reset_index()
gis_per_port["miss_pct"] = gis_per_port["n_missing"] / gis_per_port["n_total"] * 100

図と読み取り

なぜこの図か: ヒートマップ (左) で種類×カテゴリの2 次元偏りを、 バー (右) で港別の1 次元偏りを、両方提示することで欠損の構造的パターンが分離できる。

GIS 欠損パターン — 種類×カテゴリ ヒートマップ + 港別バー
GIS 欠損パターン — 種類×カテゴリ ヒートマップ + 港別バー

読み取り (左ヒートマップ):

読み取り (右バー):

解釈の注意: GIS 欠損 = 「データに緯度経度がない」だけで、 施設自体は実存する。施設番号・名称はあるが、 shapefile での空間範囲が登録されていないだけ。 これは「DoBoX に整備優先度がある」現実の反映であり、 重要港 (広島港・福山港) の道路から先に空間整備が進む。

分析 8: 3 層空間関係 (外郭 → 係留 → 交通)

狙い

本記事の主結果: L32 (外郭) と L33 (係留) と L34 (交通) の3 層空間関係を分析する。 仮説 H6: 臨港交通の道路 POLYGON は L33 係留 LineString から 100m 以内に 80%+ 位置するはず (=岸壁直結アクセス)。

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

距離計算 + 閾値判定 (POLYGON ↔ LineString):

  1. L33 係留 LineString を 1 つの巨大 MultiLineString に統合 (union_all())。 これにより距離計算が高速化される (各交通施設 vs 1 つの統合線)。
  2. 各交通施設のPOLYGON 境界から係留 LineString への最近距離を geometry.distance() で計算。 POLYGON が LineString と重なる場合は距離 = 0 m。
  3. 100 m 以内を「岸壁直結」と判定。100 m は岸壁の背後 1 ブロック程度の距離で、 「岸壁から運び出された貨物が短距離で道路に乗る」物理的範囲。

実装

L34_port_traffic.py 行 2006–2032

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

# 係留 LineString を 1 つの巨大 MultiLineString に統合 (高速化)
moor_diss = l33_gdf.geometry.union_all()

# 各交通施設 (POLYGON) → 係留 への最近距離
gdf["dist_to_moor_m"] = gdf.geometry.distance(moor_diss)
gdf["near_moor"] = gdf["dist_to_moor_m"] <= 100.0  # 100m 圏 = 岸壁直結

図と読み取り

なぜこの図か: 県全域 (左) で 3 層全体の重なりを、広島港ズーム (右) で個別の港内構造を精査する。 紫 (L32 外郭線) → 青 (L33 係留線) → 色塗り (L34 交通面) の 3 色階層が読める。

3 層空間関係 — 県全域 (左) + 広島港ズーム (右)
3 層空間関係 — 県全域 (左) + 広島港ズーム (右)

読み取り:

解釈の注意: 「100m 圏内」 = 「物理的に近い」だけで、 実際の貨物動線は岸壁のヘリ位置 × 道路の出入口位置 × 港内動線に依存する。 本分析は階層配置の位置検証であり、動線評価ではない。 本格的な動線評価はヤード設計 + 貨物量シミュレーションで別途行う必要がある (発展課題 Z3)。

仮説検証と考察

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

H claim result verdict
H1 L32/L33 41 港のうち 10 港 (≈24%) は L34 未整備、漁港の半数は未整備 未整備: 港湾 3/27, 漁港 7/14, 全体 24% 支持
H2 件数比 港湾:漁港 ≥ 10:1 (L32 1.33:1、L33 1.9:1 より圧倒的偏重) 港湾 278 (93.9%) / 漁港 18 (6.1%), 比 15.4:1 支持
H3 駐車場は港湾のみ整備、漁港には 0 件 (旅客港マーカー) 駐車場 港湾 93 / 漁港 0 支持
H4 港湾上位 3 港で 50%+ (L32/L33 より集中) 上位 3 港 (広島港, 尾道糸崎港, 福山港): 139/278 = 50.0% 支持
H5 GIS 欠損は橋りょうで顕著、漁港の橋は 100% 欠損 道路欠損 73% / 駐車場 88% / 橋りょう 79% (漁港橋りょう 100%) 支持
H6 交通施設の 80%+ が L33 係留から 100m 圏内 (岸壁直結) 全体 73.8% (港湾 74.2%, 漁港 66.7%) 部分支持
H7 3 層比 外郭:係留:交通 ≈ 5:7:2 で交通が最少 外郭:係留:交通 = 730:1060:296 (正規化 (交通=1): 2.5 : 3.6 : 1) 支持

事務所別の管理件数

管理事務所別の臨港交通施設数 (港湾 + 漁港)
管理事務所別の臨港交通施設数 (港湾 + 漁港)

読み取り:

総括: 広島県の臨港交通整備思想

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

本記事は「臨港交通施設は港湾施設階層の最終 1 km インフラ」という視点を実データで裏付けた。 296 件の交通施設が、2 つの法的カテゴリで 31 港の陸海接続容量を形成し、 L32 で示した外郭施設の防護網と L33 で示した係留施設の接岸網の陸側に階層配置されている。 この網の幾何構造を理解することは、港湾の物流動線・防災避難・観光客対応の総合分析の出発点である。

L32 / L33 / L34 の 3 層比較表 (本記事の到達点)

L32 外郭L33 係留L34 臨港交通
カバー港数27 + 14 = 4127 + 14 = 41 24 + 7 = 31 (10 港未整備)
件数 (港湾+漁港)480 + 362 = 842802 + 422 = 1,224 278 + 18 = 296
件数比 港:漁1.33:11.9:1 15.4:1 (最大偏重)
主役構造防波堤 67%物揚場 56% 道路 62% + 駐車場 31%
主役 (港湾)防波堤物揚場 + 浮さん橋 + 岸壁 道路 + 駐車場
主役 (漁港)防波堤 + 護岸物揚場 (圧倒的) 道路のみ
GIS 形式LINESTRINGLINESTRING POLYGON
主要指標延長 km延長 km面積 ha
GIS 完備率~99%~98% 22% (大量欠損)
上位 3 港集中率 (港湾)~44%~46% 50% (最強)
下層との空間関係外郭から 500m 圏内 89% 係留から 100m 圏内 74%
施設番号 prefixBCD

発展課題

結果 X1 → 新仮説 Y1 → 課題 Z1: 整備格差の歴史的経緯と政策評価

結果 X2 → 新仮説 Y2 → 課題 Z2: 施設番号 (B/C/D) の付番順と整備時系列

結果 X3 → 新仮説 Y3 → 課題 Z3: GIS 欠損 78% の構造的理由

結果 X4 → 新仮説 Y4 → 課題 Z4: 駐車場面積と旅客数の対応

結果 X5 → 新仮説 Y5 → 課題 Z5: 道路の管理者責任分界