Lesson 41

L41 航空レーザ森林資源 3件統合分析 — 樹種ポリゴン・単木ポイント・20m mesh の地理単位差を読む

LiDAR森林資源樹種ポリゴン単木ポイント森林資源量メッシュGeoPackagegeopandasアロメトリ林分指標ha材積収量比数形状比L36連携森林経営計画
所要 20-30 分 / 想定レベル: リテラシ + 林業GIS応用 / データ: DoBoX dsid 1519 + 1520 + 1521 (航空レーザ森林資源 3件), 世羅町 (1519/1520) + 03NF2 図郭 (1521)

データ取得手順

このスクリプトは初回実行時にデータを自動取得します(DoBoX からの直接ダウンロード)。

IDデータセット名
#888都市計画区域情報_区域データ_安芸高田市_行政区域
#999dataset #999
#1519航空レーザ計測に基づく森林資源データ(樹種ポリゴンデータ)
#1520航空レーザ計測に基づく森林資源データ(単木ポイントデータ)
#1521航空レーザ計測に基づく森林資源データ(森林資源量集計メッシュデータ)

実行コマンド:

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

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

学習目標と問い

研究の問い (RQ)

広島県内の航空レーザ計測に基づく森林資源 3 dataset:

これら 3 dataset は同じ航空レーザ計測 (2018-2019) から派生したが、 地理単位が異なる (市町別 vs 図郭別) ため、単純に空間結合できない。 本記事は「3 dataset を統合すると、広島県の森林タイプ・林相成熟度・林業生産性の地理がどう描けるか」を量的に検証する。

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

用語定義 (本記事独自)
材積立木の幹の体積 (m³)。単木材積 = 1 本の体積、ha材積 = 1ha あたりの合計材積 (m³/ha)。林業の経済価値の主指標。
林分樹種・林齢・密度がほぼ均一な森林の塊。本記事 1521 mesh の 20m メッシュ単位で集計された値はその林分の代表値と読む。
収量比数0-1+ の値。0 = 立木が極めてまばら、1 = 樹冠が完全に閉鎖、>0.7 = 収穫期到来の慣用閾値
形状比樹高(cm) ÷ 胸高直径(cm)。70-90 は健全、>100 は過密で不健全(細長い樹で倒木リスク高)。
樹冠長率(樹冠長 ÷ 樹高) × 100 (%)。樹高に占める樹冠の割合。40-50% が標準的健全林
アロメトリ「allometry = 異速成長」。樹木では「樹高 = c × 胸高直径^d」のべき乗法則が成り立つ。c, d は樹種固有定数。
LiDAR 林業応用層本記事独自呼称。L36-L40 のラスタ系 5 dataset と区別して、林業実務向けに集計したベクタ系 3 dataset (1519/1520/1521) を指す。

立てた仮説 (H1〜H7)

仮説主張背景
H11519 ヒノキ ≥ 40%, スギ ≤ 30%, その他 ≤ 30% 世羅町は中山間林業地で針葉樹植林が多いという広島県林業統計
H21520 でスギは樹高 +4m, 単木材積 ×2 ヒノキより大きい スギは早生・到達樹高高い植林樹種 (一般生物学)
H31520 樹高 vs 胸高直径 Pearson r ≥ 0.7 樹木のアロメトリ (allometry) 法則
H41521 ha材積 ≥ 500 m³/ha のセルは 8 近傍同種率 ≥ 0.6 で集塊 同一林班・同一管理単位は連続するため
H51521 収量比数 ≥ 0.7 のセルは平均樹高 ≥ 18m 森林経営計画上の収穫期閾値
H61521 形状比 70-90 が標準健全, >100 は不健全 森林計測学の慣用
H71520 と 1521 は地理単位が異なるため直接統合不可 本データセット最大の方法論的制約

到達点

使用データ

本記事では DoBoX の「航空レーザ計測に基づく森林資源データ」シリーズ 3 件を統合する。 すべて広島県林業課が 森林管理基盤情報 (公共測量 2 次著作物, 測量法 44 条) として公開した GeoPackage 形式のベクタデータ。CRS はEPSG:6671 (JGD2011 平面直角座標系 III 系)

論題データセットDL保存先形式件数サイズ採用エリア列数
樹種ポリゴンDoBoX #1519直DLtree_species_34462.gpkgPolygon13,025 features91 MB世羅町7
単木ポイントDoBoX #1520直DLtree_point_34462.gpkgPoint3,397,186 features553 MB世羅町12
森林資源量集計メッシュDoBoX #1521直DLfr_mesh20m_03NF2.gpkgPolygon (20m mesh)750,000 features159 MB庄原市 (含 03NF2 図郭)17

3 dataset の地理編成の違い (本記事の核心)

重要な構造的差異: 1519 と 1520 は同じ市町村で公開されているため 直接統合可能 (本記事は世羅町ペアを採用)。一方 1521 は図郭単位なので、 市町村と必ずしも一致しない。本記事の 1521 は 03NF2 図郭 (庄原市域中心) を採用したため、 1520 (世羅町) とは地理が重ならない。これが本データセットの最大の方法論的制約であり、 本記事 H7 で量的に確認する。

共通メタデータ

L36-L40 との関係 (LiDAR ファミリ)

本記事の 3 dataset は L36-L40 のラスタ系 5 dataset と同じ航空レーザ計測から派生する:

つまり LiDAR ファミリは「点群 → ラスタ (L36-L40) → 林業ベクタ (本記事)」という派生階層を成す。 本記事の 3 dataset は林業実務に直結する応用層であり、森林経営計画 (森林法第 5 条) の基礎資料となる。

ダウンロード(再現用データ・中間データ・図)

本記事の再現に必要なデータ・中間データ・図はすべて以下から直 DL 可能。

原データ (DoBoX 直リンク)

中間データ (本スクリプトが生成)

図 (PNG)

再現スクリプト

L41_forest_resources.py をダウンロードし、data/extras/L41_forest_resources/ にデータがなければ自動取得から始まります。
実行:

cd "2026 DoBoX 教材"
py -X utf8 lessons\L41_forest_resources.py

分析 1: 3 dataset の構造比較 (本記事の核心)

狙い

3 dataset の地理編成・属性・スケールを 1 枚の表にまとめ、視覚的にも対比する。 本記事の核心命題「同じ航空レーザから派生したが地理単位が異なる」を量的に確認する。

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

pyogrio.read_info() で各 GeoPackage のメタ (要素数・列数・bbox) を取得する。 これは GIS データ俯瞰の標準手法で、ファイル全体を読まずにスキーマだけを軽量に確認できる。

実装

L41_forest_resources.py 行 1294–1309

1294
1295
1296
1297
1298
import pyogrio
for k, d in DATASETS.items():
    info = pyogrio.read_info(d["gpkg"], layer=d["layer"])
    print(f"{d['label']}: features={info['features']:,}, "
          f"fields={len(info['fields'])}, bbox_w={info['total_bounds'][2]-info['total_bounds'][0]:.0f}m")

図と読み取り (図 1: 3 dataset 編成構造概念図)

なぜこの図か: 3 dataset の bbox 大きさ・要素数・属性数を 1 枚で比較。 矩形の面積で地理範囲、注釈テキストで要素数・列数を読み取る。

図 1: 3 dataset の地理編成 — 同じ航空レーザから派生したが異なる地理単位
図 1: 3 dataset の地理編成 — 同じ航空レーザから派生したが異なる地理単位

読み取り (重要発見):

表 (3 dataset メタ情報比較)

label dataset_id geom_type geographic_unit muni features fields_n bbox_w_km bbox_h_km file_mb
樹種ポリゴン 1519 Polygon 市町村単位 polygon 世羅町 13025 7 26.95 16.27 91.19
単木ポイント 1520 Point 市町村単位 point 世羅町 3397186 12 26.74 15.97 552.54
森林資源量集計メッシュ 1521 Polygon (20m mesh) 国土基本図図郭 20m mesh 庄原市 (含 03NF2 図郭) 750000 17 20.00 15.00 159.38

読み取り: 列 geographic_unit の差を読むと、本記事の核心命題が量的に確認できる。 1519/1520 は「市町村」(自治単位), 1521 は「国土基本図図郭」(測量単位) で公開される。 1521 のメッシュは EPSG:6671 (JGD2011 III 系) の原点から 20m 等間隔で規則格子を切るため、 mesh の position だけで bbox が決まり (ファイル名で識別可能)、行政界とは無関係。 これは GIS の「主題ベース vs 規則格子ベース」という古典的二元論の例である。

分析 2: 樹種ポリゴン (1519) の構成 (H1)

狙い

1519 樹種ポリゴンを読み込み、世羅町の森林の樹種構成を量化する。 件数ベースと面積ベースの 2 角度で見て、ヒノキ/スギ/その他 の地理的優占を確認 (H1 検証)。

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

geopandas で GeoPackage を全件読込 → groupby で樹種別の count と area を合計。 さらに件数ベースと面積ベースの構成比を別々に計算 = 「件数の多い樹種」 ≠ 「面積の大きい樹種」 である可能性を見る。

実装

L41_forest_resources.py 行 1351–1378

 1
 2
 3
 4
 5
 6
 7
 8
 9
1360
1361
import geopandas as gpd
gdf_ts = gpd.read_file("tree_species_34462.gpkg", layer="tree_species_34462")
species_count = gdf_ts["樹種"].value_counts()
species_area = gdf_ts.groupby("樹種")["面積_ha"].sum().sort_values(ascending=False)
species_summary = pd.concat([
    species_count.rename("polygon_count"),
    species_area.rename("total_ha"),
], axis=1).fillna(0)
species_summary["count_pct"] = species_summary["polygon_count"] / species_summary["polygon_count"].sum() * 100
species_summary["area_pct"]  = species_summary["total_ha"]      / species_summary["total_ha"].sum()      * 100
species_summary["mean_ha"]   = species_summary["total_ha"]      / species_summary["polygon_count"]

図と読み取り (図 2: 樹種ポリゴン主題図)

なぜこの図か: 樹種構成の地理分布を見る。緑=ヒノキ、青=スギ、灰=その他 で塗り分け、 世羅町行政界を黒線で囲む。集落・地形との関係も読める。

図 2: 樹種ポリゴン主題図 (1519 世羅町)
図 2: 樹種ポリゴン主題図 (1519 世羅町)

読み取り:

図と読み取り (図 3: 樹種構成 棒グラフ)

なぜこの図か: 件数と面積の 2 角度で樹種の優占を確認。 件数 vs 面積の差が「polygon サイズの樹種偏り」を示す。

図 3: 樹種構成 — 件数 vs 面積 (1519 世羅町)
図 3: 樹種構成 — 件数 vs 面積 (1519 世羅町)

読み取り (重要発見):

表 (1519 樹種別集計)

polygon_count total_ha count_pct area_pct mean_ha
樹種
ヒノキ 6617 3042.95 50.80 15.64 0.46
その他 3063 14444.03 23.52 74.22 4.72
スギ 2579 492.75 19.80 2.53 0.19
アカマツ 597 1437.86 4.58 7.39 2.41
タケ 169 44.36 1.30 0.23 0.26

分析 3: 単木ポイント (1520) の樹高・直径分布 (H2)

狙い

1520 単木ポイント (3,397,186 点) を全件属性読込し、 スギとヒノキの樹高・胸高直径・単木材積の分布を比較。 樹種ごとの形状特性生長到達点の差を確認 (H2 検証)。

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

pyogrio.read_dataframe(read_geometry=False)属性のみ全件読込。 geometry を読まないので 552 MB GPKG でも~10 秒で全件取得可能。 これは GIS データ「巨大なら属性だけ読む」という標準的高速戦略。

実装

L41_forest_resources.py 行 1429–1462

 1
 2
 3
 4
 5
 6
 7
 8
 9
1438
1439
1440
1441
1442
import pyogrio
# geometry なしで全件属性読込 (高速)
tp_attr = pyogrio.read_dataframe("tree_point_34462.gpkg",
                                 layer="tree_point_34462",
                                 read_geometry=False)
# 樹種別集計
tp_by_species = tp_attr.groupby("樹種").agg(
    n=("樹高", "count"),
    height_mean=("樹高", "mean"),
    height_median=("樹高", "median"),
    dbh_mean=("胸高直径", "mean"),
    vol_mean=("単木材積", "mean"),
    vol_total=("単木材積", "sum"),
)

図と読み取り (図 4: 単木 樹高・胸高直径ヒスト)

なぜこの図か: 樹種ごとの分布形状を比較する。 ヒストグラムのピーク位置・裾の長さ・複峰性が樹種特性を示す。

図 4: 単木 樹高・胸高直径分布 (1520 世羅町, 樹種別)
図 4: 単木 樹高・胸高直径分布 (1520 世羅町, 樹種別)

読み取り (重要発見):

表 (1520 樹種別単木統計)

n height_mean height_median height_std height_p10 height_p90 dbh_mean dbh_median dbh_std vol_mean vol_median vol_total shape_mean crown_mean
樹種
スギ 329746 20.981 21.6 5.706 13.1 27.7 28.110 27.6 9.328 0.711 0.574 234424.579 77.155 32.767
ヒノキ 3067440 14.139 14.1 5.049 7.5 20.7 20.198 19.3 7.889 0.311 0.210 953037.678 72.065 30.669

分析 4: 樹高 × 胸高直径 アロメトリ (H3, 本記事の生物物理学的核心)

狙い (本記事の生物物理学的核心)

樹木は「樹高 h ∝ 胸高直径 d^β」というべき乗法則 (アロメトリ) に従う。 1520 単木 3.4M 点で h-d 関係の Pearson 相関と回帰係数を計算し、 スギとヒノキで係数 c, β がどう違うかを検証 (H3)。

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

アロメトリ (allometry) = 「異速成長」。樹木では:

係数 β は樹種固有で、典型的に 0.5-1.0。β < 1 は「太くなる速度が高くなる速度より早い」(寸胴), β = 1 は等比 (細長), β > 1 は「高さが速い」(超細長)。

実装

L41_forest_resources.py 行 1504–1554

 1
 2
 3
 4
 5
 6
 7
 8
 9
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
import numpy as np
allometry_rows = []
for sp in ["スギ", "ヒノキ"]:
    sub = tp_clean[tp_clean["樹種"] == sp]
    h = sub["樹高"].values.astype(np.float64)
    d = sub["胸高直径"].values.astype(np.float64)
    # 線形回帰 h = a + b * d
    X = np.vstack([np.ones(len(d)), d]).T
    coef, *_ = np.linalg.lstsq(X, h, rcond=None)
    a, b = coef
    # 対数べき乗モデル h = c * d^β
    log_h, log_d = np.log(h), np.log(d)
    Xl = np.vstack([np.ones(len(log_d)), log_d]).T
    coef2, *_ = np.linalg.lstsq(Xl, log_h, rcond=None)
    log_c, exp_d = coef2
    allometry_rows.append({
        "species": sp,
        "n": len(sub),
        "r_pearson": float(np.corrcoef(h, d)[0, 1]),
        "lin_intercept": float(a), "lin_slope": float(b),
        "log_c": float(np.exp(log_c)), "log_exp": float(exp_d),
    })

図と読み取り (図 5: 樹高 × 胸高直径 散布 + 対数回帰線)

なぜこの図か: アロメトリ関係を視覚的に確認する。 散布点で雲の形を、回帰線でべき乗モデルの中心線を見る。 30k 点の subsample 表示と回帰線で「3.4M 全体の傾向」を読む。

図 5: 樹高 × 胸高直径 アロメトリ (1520 世羅町, スギ/ヒノキ)
図 5: 樹高 × 胸高直径 アロメトリ (1520 世羅町, スギ/ヒノキ)

読み取り (重要発見):

表 (アロメトリ係数)

species n r_pearson lin_intercept lin_slope log_c log_exp h_mean d_mean
スギ 329746 0.8292 6.7249 0.5072 1.6259 0.7668 20.9814 28.1102
ヒノキ 3067440 0.8051 3.7305 0.5153 1.0795 0.8532 14.1388 20.1977

図と読み取り (図 6: 単木サンプル位置マップ)

なぜこの図か: 単木 3.4M 点の地理分布を視覚的に把握する。 点を樹高で色分け (黄=低木 → 緑=高木) して、世羅町内の樹高地理パターンを読む。

図 6: 単木サンプル {len(gdf_tp):,} 点 (1520 世羅町, 色=樹高 m)
図 6: 単木サンプル {len(gdf_tp):,} 点 (1520 世羅町, 色=樹高 m)

読み取り:

分析 5: mesh (1521) ha材積分布と林業生産性 (H4)

狙い (本記事の林業生産性核心)

1521 mesh 750k セル (うち numeric 40,361 セル) で、 ha材積 (m³/ha) の地理分布と樹種別構成を分析する。 「どこに高材積エリア (= 林業価値の高い森林) があるか」を量化する (H4 集塊性)。

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

20m mesh の各セルには林分指標が 12 列付与されている。 geopandas で全件読込し、ha材積 で choropleth マップを描く。 さらにha材積 5 階級 (0-100, 100-250, 250-500, 500-1000, >1000 m³/ha) で量的比較する。

実装

L41_forest_resources.py 行 1601–1636

 1
 2
 3
 4
 5
 6
 7
 8
 9
1610
1611
1612
1613
1614
1615
import geopandas as gpd
gdf_mesh_full = gpd.read_file("fr_mesh20m_03NF2.gpkg", layer="fr_mesh20m_03NF2")
mesh_valued = gdf_mesh_full[gdf_mesh_full["樹種"].notna()].copy()
mesh_numeric = mesh_valued.dropna(subset=["ha材積", "立木密度", "平均樹高"]).copy()

# 5 階級分類
VOLUME_CLASSES = [
    ("極低", 0, 100), ("低", 100, 250), ("中", 250, 500),
    ("高", 500, 1000), ("極高", 1000, 5000)
]
def classify_volume(v):
    for i, (_, lo, hi) in enumerate(VOLUME_CLASSES, start=1):
        if lo <= v < hi: return i
    return 0
mesh_numeric["volume_class"] = mesh_numeric["ha材積"].apply(classify_volume)

図と読み取り (図 7: ha材積 choropleth)

なぜこの図か: 林業価値の地理分布を視覚化。色の濃い領域 = 高材積。 庄原市行政界を黒線で囲み、図郭外との関係も読む。

図 7: ha材積 choropleth (1521 03NF2, 庄原市域)
図 7: ha材積 choropleth (1521 03NF2, 庄原市域)

読み取り:

図と読み取り (図 9: ha材積 5 階級分類)

なぜこの図か: 連続値 ha材積 を慣用 5 階級にカテゴリ化し、 階級マップ + 樹種別構成比 stack-bar の 2 角度で見る。

図 9: ha材積 5 階級 — マップ × 樹種別構成
図 9: ha材積 5 階級 — マップ × 樹種別構成

読み取り (重要発見):

表 (1521 樹種別 ha材積 5 階級構成)

極低 極高
樹種
スギ 201 1288 6479 6069 159
ヒノキ 1808 8992 12310 2361 694

表 (1521 樹種別 高材積比率)

pct_ge_500
樹種
スギ 43.87
ヒノキ 11.68

図と読み取り (図 12: 樹種別 ha材積 small multiples)

なぜこの図か: 樹種ごとの ha材積地理分布を並列で比較。 スギとヒノキの林分立地の差を視覚的に確認。

図 12: 樹種別 ha材積マップ (1521 small multiples)
図 12: 樹種別 ha材積マップ (1521 small multiples)

読み取り:

分析 6: 林分指標 box plot と健全度 (H5, H6)

狙い

1521 mesh の10+ 列の林分指標を樹種別に箱ひげ図で並べて、 スギ・ヒノキ・その他の形状特性 (高さ・直径)健全度 (収量比数・形状比・樹冠長率) を 1 枚で比較する。

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

箱ひげ図 (box plot) は分布の中央値・四分位範囲・外れ値を 1 つの図で示す。 ヒストグラムより圧縮的で、複数群の比較に向く。

実装

L41_forest_resources.py 行 815–848

 1
 2
 3
 4
 5
 6
 7
 8
 9
824
825
826
827
828
fig, axes = plt.subplots(2, 3, figsize=(15, 9))
metrics = [
    ("ha材積", "ha材積 (m³/ha)", (0, 1500)),
    ("立木密度", "立木密度 (本/ha)", (0, 2500)),
    ("平均樹高", "平均樹高 (m)", (0, 35)),
    ("平均直径", "平均直径 (cm)", (0, 50)),
    ("収量比数", "収量比数", (0, 1.2)),
    ("形状比", "形状比", (30, 110)),
]
for ax, (col, title, ylim) in zip(axes.flat, metrics):
    data = [mesh_numeric[mesh_numeric["樹種"]==sp][col].dropna().values
            for sp in ["スギ","ヒノキ","その他"]]
    ax.boxplot(data, labels=["スギ","ヒノキ","その他"],
               patch_artist=True, showfliers=False)

図と読み取り (図 8: 林分指標 box plot)

なぜこの図か: 6 つの林分指標を樹種別に並列比較し、 「樹種ごとの林分特性プロファイル」を 1 枚で読む。

図 8: 林分指標 6 種 × 樹種 (1521 mesh)
図 8: 林分指標 6 種 × 樹種 (1521 mesh)

読み取り (重要観察):

図と読み取り (図 10: 収量比数 vs 平均樹高 散布)

なぜこの図か: 収穫期判定の閾値 (収量比数 0.7) と樹高の関係を視覚化。 赤線 = 収量比数 0.7, 橙線 = 平均樹高 18m。両線の右上 = 「収穫期到来かつ大樹」エリア。

図 10: 収量比数 × 平均樹高 (1521 mesh)
図 10: 収量比数 × 平均樹高 (1521 mesh)

読み取り (重要発見):

表 (1521 樹種別 mesh 集計)

n_mesh haarea ha_volume_mean ha_volume_median density_mean density_median height_mean height_median diameter_mean yield_ratio_mean yield_ratio_median shape_mean crown_mean
樹種
スギ 14196 567.84 482.607 467.912 756.518 725.0 21.227 21.5 28.348 0.608 0.62 77.609 38.513
ヒノキ 26165 1046.60 325.269 278.400 962.528 950.0 14.939 15.3 22.746 0.572 0.59 67.864 39.120

表 (1521 収穫期セル集計)

n_total n_harvest pct_harvest height_in_harvest
樹種
スギ 14196 4151 29.24 22.93
ヒノキ 26165 6069 23.20 17.76

図と読み取り (図 11: 形状比ヒスト — 林相健全度)

なぜこの図か: 形状比 70-90 が健全、>100 が不健全という慣用閾値を視覚化。 mesh (集計値) と単木 (個別値) を並べて、スケール依存性を見る。

図 11: 形状比分布 — mesh (集計) vs 単木 (個別)
図 11: 形状比分布 — mesh (集計) vs 単木 (個別)

読み取り:

分析 7: 3 dataset 統合の制約と方法論的提言 (H7, 本記事の方法論的核心)

狙い (本記事の方法論的核心)

本記事の最大の発見は「3 dataset は同じ航空レーザから派生したが、地理単位が異なるため直接統合できない」 ことの量的確認である。具体的には:

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

本セクションは新規計算ではなく、これまでの分析結果から整合性を量的に確認する。 特に「同じ自治体ペア」と「異なる地理単位」での指標差を整理。

1519 と 1520 の整合性 (同自治体ペア)

世羅町の 1519 polygon (n=13,025) と 1520 point (n=3,397,186) は同一自治体のため、 直接重ね合わせ可能。1520 はスギ・ヒノキ抽出のため、1519 のスギ・ヒノキ polygon 内にのみ存在する:

樹種1519 polygon 件数1519 polygon 総面積 (ha)1520 単木件数密度 (本/ha)
スギ 2,579 492.8 329,746 669
ヒノキ 6,617 3042.9 3,067,440 1008
その他 3,063 14444.0 0 (= 1520 は針葉樹抽出のため対象外)

読み取り (重要発見):

1521 と 1519/1520 の地理重なり (なし)

項目1519/1520 (世羅町)1521 (03NF2 図郭)重なり
X 範囲 (m, EPSG:6671) 64227 〜 91178 60000 〜 80000 あり
Y 範囲 (m, EPSG:6671) -161956 〜 -145690 -105000 〜 -90000 なし
市町村code34462 (世羅町)34210 (庄原市)異なる

読み取り (本記事の方法論的核心):

仮説検証と考察

本記事で立てた 7 つの仮説 (H1〜H7) と、3 dataset 統合分析の照合結果:

H主張結果判定
H1Sera 樹種ポリゴン (1519) はヒノキ優占で全体構成 ヒノキ≥40%・スギ≤30%・その他≤30%ヒノキ 50.8%, スギ 19.8%, その他 23.5%支持
H2単木 (1520) でスギ平均樹高はヒノキ+4m 以上、平均単木材積はヒノキ×2 以上スギ 21.0m vs ヒノキ 14.1m (差=+6.8m), スギ材積 0.711m³ vs ヒノキ 0.311m³ (倍=2.29)支持
H3単木 (1520) で樹高 vs 胸高直径 Pearson r ≥ 0.7 (アロメトリ)スギ r=0.829, ヒノキ r=0.805支持
H4mesh (1521) で ha材積 ≥ 500 m³/ha のセルは 8 近傍同種率 ≥ 0.6高材積 8 近傍同種率 = 0.564部分支持
H5mesh (1521) 収量比数 ≥ 0.7 のセルは平均樹高 ≥ 18m (収穫期判定)収量比数≥0.7 のセルの平均樹高 = 19.86m (n=10,220)支持
H6mesh (1521) 形状比 70-90 が標準健全範囲, >100 は不健全70-90 内 55.5%, >100 0.07%支持
H7単木 1520 (世羅町) と mesh 1521 (03NF2=庄原市域) は地理単位が異なり直接統合不可単木 muni=世羅町 vs mesh muni=庄原市 (含 03NF2 図郭) (共通=False)支持

判定サマリ: 支持 6 / 部分支持 1 / 反証 0 (全 7 仮説中)

主な発見 (5 点)

  1. 3 dataset の地理単位差が量的に確認 (H7 支持): 1519 (市町村 polygon) + 1520 (市町村 point) は同自治体ペアとして直接統合可能、 1521 (図郭 mesh) は独立した地理単位で 1519/1520 とは bbox が重ならない。 これは「同じ航空レーザ計測から派生したが、設計思想 (主題ベース vs 規則格子ベース) の違いで地理単位が分離」 という GIS 古典問題の例。
  2. 世羅町は針葉樹植林 + 広葉樹混交林の中山間林業地 (H1 支持): 1519 で ヒノキ 51% + スギ 20% = 針葉樹植林 71%, その他 (広葉樹等) 24%。 = 「中山間林業地として典型的な構成」が量的に確認できた。
  3. スギはヒノキより高木・大径・大材積 (H2 支持): 1520 単木 3.4M で スギ平均樹高 21.0m, ヒノキ 14.1m (差 +6.8m)。 単木材積はスギ ×2.3。 林学常識をオープンデータで桁違いの標本数 (従来の毎木調査 ~10² → 単木抽出 ~10⁶) で再現。
  4. 樹高 vs 胸高直径のアロメトリ法則がオープンデータで再現 (H3 支持): スギ r=0.83, β=0.77, ヒノキ r=0.81, β=0.85。 = 樹木のべき乗法則 (allometry) が 3.4M 単木で量的に成立。 研究的意義: 自治体別・斜面方位別・標高別のアロメトリ係数算出への展開可能性。
  5. 高材積エリアは集塊し、収穫期セルは平均樹高で代替推定可能 (H4 部分支持, H5 支持): 1521 mesh で ha材積 ≥ 500 m³/ha のセルは 8 近傍同種率 0.564。 = 林班単位の塊で連続分布。 収量比数 ≥ 0.7 のセル平均樹高 19.9m。 = 「収穫期は樹高でも代理判定可能」という方法論的応用可能性

世羅町・庄原市域の森林資源量サマリ (本記事の量的サマリ)

世羅町 (1519/1520)03NF2 図郭/庄原市域 (1521)
polygon/point/mesh 件数 1519: 13,025 polygon, 1520: 3,397,186 point 1521: 40,361 numeric mesh (全 750,000)
主要樹種優占 ヒノキ 51% (件数), 16% (面積) その他 0%, ヒノキ 65%
平均樹高 (m) 1520: スギ 21.0, ヒノキ 14.1 1521: スギ 21.2, ヒノキ 14.9
立木材積 1520 単木材積: スギ 0.711 m³, ヒノキ 0.311 m³ 1521 ha材積中央値: 329 m³/ha
収穫期到来 (収量比数≥0.7) 10,220 mesh (25.3%)
形状比 70-90 健全範囲 1520 単木: 39.4% 1521 mesh: 55.5%
アロメトリ β (樹高=c·dbh^β) 1520: スギ β=0.77, ヒノキ β=0.85
高材積 (≥500m³/ha) 集塊性 1521: 8隣接同種率 0.564

考察

本記事の主たる発見は、「広島県の航空レーザ森林資源 3 dataset は同じ計測 (2018-2019) から派生したが、 地理編成 (市町村別 vs 図郭別) と属性深度 (基本 vs 詳細) が大きく異なるため、 利用者は dataset ごとに異なるアプローチが必要」であることの量的実証である。

1519 樹種ポリゴンは森林の輪郭マップとして最も基本的、属性は素朴 (樹種・面積) だが 全市町村で公開済みなので県全域の樹種分布把握に最適。 1520 単木ポイントは桁違いのデータ量 (~10⁶ point/市町村) でアロメトリ等の生物物理学的研究に向く。 1521 mesh は10+ 列の林分指標で林業実務 (収穫期判定・健全度評価) に直結する。

樹種構成 (H1) は世羅町ではヒノキ優占 (51%), スギ 20%, その他 24%。 針葉樹植林 (ヒノキ+スギ) が約半分を占める中山間林業地として典型的。 これは森林経営計画の基礎情報であり、林野庁 GIS でも国土数値情報「森林地域」と整合する。

単木スケールでのスギ vs ヒノキ (H2) は、3.4M 点という統計的検定力の極めて高い標本で、 スギの優位性 (高木・大径・大材積) を明瞭に示した。 特にスギ単木材積はヒノキの×2.3であり、 林業経済的にスギ林分の方が単位面積あたり価値が高い (= 高林齢で高材積) ことの量的根拠。

アロメトリ (H3) は樹木の生物物理学法則を 3.4M 単木で実証した重要な発見である。 スギ h=1.63·d^0.77, ヒノキ h=1.08·d^0.85 というべき乗関係は、従来は数百本の毎木調査でしか得られなかった係数を 4 桁拡大したサンプルで安定推定。 研究的意義として、地域別・斜面方位別アロメトリ係数の算出が現実的になった。

1521 mesh の林分指標 (H4-H6) は林業実務への直接的応用を示す。 高材積エリアの集塊性 (8 近傍 0.564) は林班単位の連続性を反映し、 収量比数 ≥ 0.7 セルの平均樹高 19.9m は収穫期の樹高代理可能性を示唆。 形状比 70-90 健全範囲が 56% と多数派であり、 広島県の管理林分の概ね健全性が量的に確認できた。

本記事最大の方法論的貢献は3 dataset の地理単位差 (H7) の量的確認である。 1519/1520 (市町村) と 1521 (図郭) は構造的に分離されており、 県全域の森林資源 1 枚画像を作るには 10 市町 × 10 図郭 = 大量のファイル統合作業が必要。 オープンデータ提供者 (広島県林業課) への提言として、「市町村単位 1521 mesh の追加公開」または 「県全域統合 GeoPackage の単一ファイル配布」が利用者の研究効率を大幅に向上させる (発展課題 Z3 で扱う)。

発展課題

結果 X1 → 仮説 Y1 → 課題 Z1: L36 樹高ラスタ (DCHM) と 1520 単木ポイントの直接対応関係検証

結果 X1: 1520 単木ポイントは「樹種ポリゴン (1519) でスギ・ヒノキと判読された区域内において DCHM データ等を利用して樹頂点を抽出した点」と公式説明されている (DoBoX dataset 1520 説明文)。 本記事 図 6 で世羅町内に単木点が密に分布することを確認したが、 L36 樹高ラスタ (DCHM) との 1:1 対応は未検証。

新仮説 Y1: 1520 単木ポイントの座標 (x, y) における L36 DCHM ラスタのピクセル値は、 1520 の樹高 (m) 列とほぼ一致するはず (= L36 ラスタ値が 1520 単木抽出の元データ)。 ただし overview 解像度差や時期ずれ (DCHM 計測時期 vs 1520 計測 2019-01-19) で±1m 程度の誤差あり。

課題 Z1: L36 樹高ラスタ (世羅町 1m, 446M セル) を rasterio で開き、 1520 の各単木座標で rasterio.sample によりピクセル値を取得。 単木の樹高列 vs DCHM 値の Pearson 相関を計算し、r ≥ 0.95 で 1:1 対応が量的に裏付けられる。 さらに残差 (DCHM - 1520樹高) のヒストグラムで抽出アルゴリズムのバイアス (= 樹頂点検出の系統誤差) を同定可能。 これは LiDAR 林業応用層と LiDAR ラスタ層の派生関係の量的実証であり、 研究的意義は L36 と本記事の記事間整合性の裏付け。

結果 X2 → 仮説 Y2 → 課題 Z2: 1521 mesh の収量比数を地形要因で予測

結果 X2: 1521 mesh の収量比数は 0-1.08 の範囲で分布、≥0.7 セルが 25% を占める。 ただし収量比数の地理パターンは本記事では未分析。

新仮説 Y2: 収量比数は地形要因 (標高・傾斜・斜面方位) で予測できる。 すなわち 「南向き・緩斜面・標高 200-500m」のセルは収量比数 ≥ 0.7 の確率が高い。 これは林業経営学の常識 (= スギ・ヒノキの好立地条件) を量的に検証することに相当。

課題 Z2: 1521 mesh と L40 標高ラスタ・L39 傾斜ラスタをセル単位で空間結合。 ただし mesh は 20m, ラスタは 1m なので解像度ダウンサンプルが必要。 標高 + 傾斜 + 斜面方位 (= 北/南/東/西の 4 区分) を特徴量として、収量比数を目的変数に Random Forest 回帰。 重要度ランキングで「林業生産性に最も効く地形要因」を同定。 さらに 03NF2 だけでなく 10 図郭で繰り返して、地域横断的な収量比数モデルを構築。

結果 X3 → 仮説 Y3 → 課題 Z3: 県全域の森林資源 1 ファイル統合 (オープンデータ提供者への提言)

結果 X3: 1519/1520 (市町村単位 10 ファイル) と 1521 (図郭単位 10 ファイル) は地理編成が異なり、 県全域図を作るには 20+ ファイルの個別 DL → 結合処理が必要。 これは利用者の研究効率を大きく阻害する。

新仮説 Y3: 県全域統合 GeoPackage (= 全市町村 + 全図郭をマージしたシングルファイル) を提供すれば、 利用者の前処理コストが劇的に下がり、研究の生産性が向上する。 GeoPackage は 1 ファイル内に複数レイヤ (tree_species_pref, tree_point_pref, fr_mesh_pref) を保持できるので、技術的には可能。

課題 Z3: 本記事のスクリプトを 10 市町 × 3 dataset で繰り返して実行し、 gpd.GeoDataFrame.to_file で県全域マージファイルを生成。 ファイルサイズの試算 (10 市町 × 552 MB ≈ 5 GB の単木) で実用上の制約を確認し、 「Cloud Optimized GeoPackage (COG-style chunked) 配布」または 「市町村別 ZIP のままで提供 + 統合スクリプトを公開」のどちらが現実的か検討。 広島県林業課・DoBoX 運営への政策提言として論文化可能。

結果 X4 → 仮説 Y4 → 課題 Z4: アロメトリ係数の自治体横断比較

結果 X4: 世羅町でスギ β=0.77, ヒノキ β=0.85。 これらは世羅町固有の値であり、他自治体での再現性は未検証。

新仮説 Y4: アロメトリ係数 β は気候帯・標高帯・管理状態で変動する。 広島県の 10 自治体で計算すると、沿岸 (温暖) vs 内陸 (寒冷) で β が ±0.05 程度異なる。 特に内陸高標高 (= 庄原・北広島町) では樹高生長が抑制され、β が小さくなる。

課題 Z4: 1520 単木データを 10 自治体すべてで取得 (= 計 ~30M 単木) し、 自治体ごとに β を計算。気温平年値 (気象庁データ) ・標高 (L40 平均) との回帰で 「地域要因 → β」のモデルを構築。アロメトリ係数の地域分布図を作り、 広島県の森林管理ゾーニングへの活用 (低 β 地域は早期間伐推奨等) を提案。

結果 X5 → 仮説 Y5 → 課題 Z5: ha材積の時系列トレンド (再計測時の変化検出)

結果 X5: 本記事の計測年は 2019-01-19 単一時点。森林の材積は 1 年で 5-10 m³/ha 増加するため、 再計測 (例: 2024 年) で5 年間の材積増加量が観測できる。

新仮説 Y5: 2019 → 2024 の ha材積差分は、 10-50 m³/ha の正の増加 (= 通常成長) を示すセルが大半。 ただし皆伐・間伐・台風被害のセルは負の差分 (- 100 m³/ha+) を示し、空間的に集塊する。

課題 Z5: 広島県が 2024-2025 に再計測を予定 (DoBoX dataset 1527, 1434 等参照)。 新計測の 1521 mesh と 2019 版を空間結合し、ha材積差分マップを作成。 正の差分 (成長) vs 負の差分 (伐採・被害) の地理パターンを分析。 これは森林炭素吸収量 (CO2) 推定の基礎データになり、 脱炭素政策・J-クレジット制度への直接応用可能。

結果 X6 → 仮説 Y6 → 課題 Z6: 単木 形状比の不健全林分マッピング

結果 X6: 単木 1520 で形状比 >100 (= 過密で不健全) のセルは 6.1%。 これらの地理集塊性は未分析。

新仮説 Y6: 不健全林分 (形状比 >100) は、「植栽後 30-50 年で間伐が遅れた」放置林に集塊する。 すなわち管理単位 (林班) 単位で連続して不健全。

課題 Z6: 1520 単木の形状比 >100 を mask とし、 本記事と同じ 8 近傍同種率を計算。集塊性 ≥ 0.5 ならば「林班単位の放置林」が量的に同定。 さらに森林経営計画 GIS (国土数値情報「森林地域」 + 広島県林業 GIS) と空間結合し、 不健全林分の所有者・管理者を特定 (政策提言: 間伐補助金重点投下対象の地理ターゲティング)。

結果 X7 → 仮説 Y7 → 課題 Z7: 樹冠面積データの欠損分析

結果 X7: 単木 1520 の 樹冠面積 列は世羅町データで全件 NaN。 他自治体や mesh 1521 の面積_ha 列とは別概念で、未充填の理由は未明。

新仮説 Y7: 樹冠面積は計測初期段階では未集計で、後の自治体 (= 2024 以降公開分) では充填されている可能性が高い。 あるいは樹頂点抽出アルゴリズムの仕様上、樹冠半径推定が信頼できないため未公開。

課題 Z7: 10 自治体の 1520 で樹冠面積列の充填率を確認。 未充填なら「DCHM ラスタから個別樹冠を抽出する Watershed セグメンテーション」を独自実装。 これは林業計測学の標準手法 (Popescu 2007 等) で、L36 樹高ラスタ + L37 点群密度 から派生可能。 新計算した樹冠面積 vs 樹冠長率 vs 単木材積で樹冠形態と材積の関係を量的に検証。