Lesson 94

3次元点群データ深掘り — ds1527 LAS 64件の物理構造と公開哲学の進化

LASlaspy点群txt2lasASPRSDEM3次元中山間公開哲学#1527
所要 40〜60 分 / 想定レベル: 中級(geopandas・ファイル解析既習) / データ: DoBoX #1527 / L42 キャッシュ(samples_meta_full.json)

データ取得手順

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

IDデータセット名
#65地図情報_3次元点群データ_オープン
#555土砂災害警戒区域・特別警戒区域情報_尾道市
#666dataset #666
#999dataset #999
#1434地図情報_3次元点群データ_オープン_2023
#1527地図情報_3次元点群データ_オープン_2024

実行コマンド:

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

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

概要・研究の問い・仮説

L42 との差別化:
観点L42(既存)L94(本記事)
対象ds65 / ds1434 / ds1527 の 3 vintage 俯瞰ds1527 の LAS 64件を単独深掘り
LAS 言及「64件が新規追加」という構造的事実のみ物理構造・点密度・分類・生成方法を完全分析
公開哲学触れていない「派生→raw」転換を量的に実証
コードL42 の metadata 一覧構築コードlaspy 点群解析・図郭コード解読コード

主 RQ

広島県 DoBoX ds1527 の LAS 点群 64 件はどのような物理構造を持ち、 同一地域の既存データセット(ds65)と比べて何が進化したか、 「派生データから raw 公開へ」という哲学転換は量的にどう実証されるか?

サブテーマ(3 章)

  1. RQ1 — 物理構造: LAS ヘッダー・点密度・ASPRS 分類・タイル規模の実測
  2. RQ2 — 3 vintage 比較: ds65/ds1434/ds1527 の resource 構成・図郭コード・重複分析
  3. RQ3 — 公開哲学の転換: 「派生データのみ」→「raw(LAS)追加」の 6 観点比較と DoBoX 進化史

仮説(H1〜H9)

  1. H1(地理的集中): 64件すべて 03nf 区画(三次・庄原 中山間)= 集中度 ≥ 95%
  2. H2(技術仕様): LAS 1.4 + ASPRS 多クラス分類 + 点密度 ≥ 8 pts/m²
  3. H3(タイル規模): 1タイル ≈ 500m × 500m(地図情報レベル 500 の標準)
  4. H4(重複図郭): ds65 と ds1527 の重複 1km タイル ≥ 3
  5. H5(密度経年): ds1527 点密度 > ds65 推定値 × 2
  6. H6(入れ子関係): ds1527 の 4桁コード(500m)= ds65 の 3桁コード(1km)の 1/4 サブタイル
  7. H7(LAS 初公開): ds65/ds1434 = LAS なし、ds1527 = LAS 64件(初出)
  8. H8(txt2las 生成): ds1527 LAS の generating_software = "txt2las (version 210418)"
  9. H9(公開段階性): ds1527 の resource 構成に段階的公開の痕跡が確認される

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

到達点

使用データ

論題データセットDL保存先形式サイズ
3次元点群データ(ds1527 / #1527)DoBoX #1527ページから DL ボタンdata/extras/L42_map_information/samples_meta_full.jsonJSON(メタ情報キャッシュ / L42 成果物)
LAS サンプルファイル(03nf2634_23)DoBoX #1527直DLdata/extras/L42_map_information/samples_extracted/03nf2634_23_05mcsv-las.lasLAS 1.2 (275KB)
県内 admin 境界DoBoX #—(L44 キャッシュ)ページから DL ボタンdata/extras/L44_storm_surge/_cache/admin_diss.gpkgGPKG(キャッシュ)

個別取得(PowerShell, このレッスンだけ):

cd "2026 DoBoX 教材"
iwr "https://hiroshima-dobox.jp/resource_download/173466" -OutFile "data/extras/L42_map_information/samples_extracted/03nf2634_23_05mcsv-las.las"

一括取得(全レッスン共通, 推奨):

cd "2026 DoBoX 教材"
py -X utf8 data\fetch_all.py

fetch_all.py はカタログ・追加データを data/data/extras/ に再現可能ダウンロード。DoBoX のオープンデータは申請不要、商用・非商用とも利用可。本レッスンの .py スクリプトは、データが無ければ自動取得してから処理を始めるよう実装されていますensure_dataset() ヘルパ)。

分析アーキテクチャ(追加ダウンロードなし)

本記事はすべてローカルキャッシュのみで完結する(HTTP リクエストなし)。 samples_meta_full.json(L42 の成果物)に 3 データセット全 resource のメタ情報が集約済みであり、 サンプル LAS ファイル 1 件(275KB)のみ laspy で直接解析する。 64件すべての LAS を取得・解析する場合は別途 cache builder スクリプトが必要(本記事対象外)。

laspy 2.x — インポートと依存関係

pip install laspy[lazrs]   # LAZ 圧縮対応版(推奨)
# または
pip install laspy          # LAS のみ対応
import laspy

resource 構成サマリ

データセットLAS点群DEM-TXTオルソフォト等高線DXF水部境界メタデータXMLその他合計
ds65 (#65)011311211352100400
ds1434 (#1434)01211201213080400
ds1527 (#1527)6465187641550400

ds65 の「その他」52件は DEM グリッドデータの 08番サブタイル(3桁コード)。
ds1527 の「その他」15件は水部ポリゴン境界線データ(新規追加形式)。
ds1527 はオルソフォト 187件と多く、精度向上に伴い追加エリアが拡大した。

ダウンロード

中間データ(CSV)

ファイル内容
L94_resource_types.csv 3 データセット × resource タイプ別件数(主成果物)
L94_las_header.csv LAS ヘッダーメタデータ — サンプル実測値 vs 期待値比較
L94_tile_overlap.csv ds65/ds1527 図郭コード重複件数
L94_classification.csv ASPRS 分類分布(class × 点数 × 割合)
L94_las_filelist.csv LAS 64件全リスト(rid, title, area_code)
L94_raw_vs_derived.csv 派生(DEM-TXT)vs raw(LAS)6 観点比較
L94_summary.csv 全体サマリ(点密度・バージョン・件数等)
L94_hypothesis.csv 仮説 H1〜H9 検証結果

図(PNG)

ファイル内容
図 1 resource タイプ比較 3 データセット × タイプ別件数 グループ棒グラフ
図 2 対象エリア地図 三次市・庄原市(中山間)を赤くハイライト
図 3 LAS ヘッダー表 実測値 vs 期待値 比較表(不一致 = 赤背景)
図 4 点密度比較 ds65 推定値 vs ds1527 実測値 棒グラフ
図 5 ASPRS 分類分布 実測(class 0 のみ)vs 参考 ALS の比較
図 6 図郭入れ子構造 1km(3桁)⊃ 500m(4桁)の入れ子模式図
図 7 派生 vs raw 比較表 6 観点比較の表形式フィギュア
図 8 公開哲学タイムライン 2014 → 2023 の DoBoX 公開哲学進化史

スクリプト

L94_lidar_pointcloud_2024.py — 単独実行可

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

第 1 章 LAS 点群 64件の物理構造(RQ1)

狙い

ds1527 の代表サンプル LAS を laspy で解析し、 LAS バージョン・生成ソフトウェア・点密度・ASPRS 分類を実測する。 計画時の仮説(LAS 1.4 / ASPRS 多クラス / 密度 ≥ 8)と実際を比較し、 「どのような点群か」を正直に報告する。

図2: ds1527 LAS 64件の対象エリア — 三次市・庄原市(中山間)に完全集中
図2: ds1527 LAS 64件の対象エリア — 三次市・庄原市(中山間)に完全集中
図3: LAS ヘッダーメタデータ実測値 — 赤背景 = 期待値と不一致
図3: LAS ヘッダーメタデータ実測値 — 赤背景 = 期待値と不一致
図4: 点密度比較 — ds65 推定 1.0 vs ds1527 実測 2.598 pts/m²
図4: 点密度比較 — ds65 推定 1.0 vs ds1527 実測 2.598 pts/m²
図5: ASPRS 分類分布 — 実測(全点 class 0)vs 高品質 ALS 参考例
図5: ASPRS 分類分布 — 実測(全点 class 0)vs 高品質 ALS 参考例

laspy 2.x コード解説

L94_lidar_pointcloud_2024.py 行 667–757

 1
 2
 3
 4
 5
 6
 7
 8
 9
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
import laspy
from pathlib import Path
from collections import Counter
import numpy as np

# LAS ファイル読込(laspy 2.x)
las = laspy.read("03nf2634_23_05mcsv-las.las")

# ── ヘッダー情報 ──
version  = f"{las.header.version.major}.{las.header.version.minor}"
software = las.header.generating_software.strip()
pformat  = las.point_format.id
npoints  = len(las.points)
date     = las.header.creation_date

# ── 座標範囲 → 点密度 ──
x_range = las.header.x_max - las.header.x_min   # 単位: m
y_range = las.header.y_max - las.header.y_min
area    = x_range * y_range
density = npoints / area     # pts/m²

# ── ASPRS 分類分布 ──
classes = np.array(las.classification, dtype=np.int16)
dist    = Counter(int(c) for c in classes)
# ASPRS: 0=未分類, 2=地表, 3-5=植生, 6=建物, 9=水面

print(f"LAS {version} / format {pformat}")
print(f"software: {software}")        # txt2las (version 210418)
print(f"points: {npoints:,}")
print(f"density: {density:.3f} pts/m²")
print(f"class dist: {dict(dist)}")    # {0: 13767}
H2 は 3 指標すべてで不支持:
計画時に仮説した「LAS 1.4 + ASPRS 多クラス + 密度 ≥ 8」はすべて外れた。
実際は LAS 1.2(旧仕様)、全点 class 0(ASPRS 分類なし)、密度 2.598 pts/m²
これは H8 で確認された通り、DEM-TXT → txt2las 変換という生成経路から必然的に導かれる。 元の航空レーザー計測生データ(真の raw LAS)は DoBoX に公開されておらず、 DEM グリッドから逆生成した「疑似 LAS」であるため、多クラス分類や高密度は持ちえない。

考察

図 2 から、64件すべてが 03nf 区画(三次市・庄原市の中山間エリア)に集中している(H1: 支持)。 図 3 のヘッダー表から、LAS バージョンは 1.2(H2 LAS 1.4: 不支持)、 generating_software は txt2las (version 210418)(H8: 支持)で、 txt2las による DEM-TXT からの変換が確認された。
図 4 から点密度は 2.598 pts/m² であり、ds65 推定値(1.0 pts/m²)の 2.6 倍(H5: 支持)。 1m DEM グリッドから 0.5m グリッドへの解像度向上が点密度の実質的増加をもたらしている。
図 5 から ASPRS 分類は全点 class 0(未分類)であり、植生・建物・水面の自動分類は行われていない。 これは txt2las 変換の制約上避けられず、H2 の「ASPRS 多クラス分類」期待は根本的に外れた。

第 2 章 3 データセット比較(RQ2)

狙い

ds65(2014-18年度)/ ds1434(中間)/ ds1527(2022年度)の resource 構成・図郭コード・ 地理的重複を定量的に比較し、「整備戦略の違い」を明らかにする。

図1: 3データセット × resource タイプ別件数 — LAS は ds1527 のみ 64件
図1: 3データセット × resource タイプ別件数 — LAS は ds1527 のみ 64件
図6: 図郭入れ子構造 — ds65 1km(3桁)⊃ ds1527 500m(4桁)
図6: 図郭入れ子構造 — ds65 1km(3桁)⊃ ds1527 500m(4桁)

JSON メタデータ解析コード

 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
34
import json, re
from collections import Counter

with open("samples_meta_full.json") as f:
    meta = json.load(f)

def classify(title):
    if "_LAS_" in title:           return "LAS点群"
    if "グリッドデータ" in title:  return "DEM-TXT"
    if "オルソ" in title:          return "オルソフォト"
    if "等高線" in title:          return "等高線DXF"
    return "その他"

# 3データセット比較
for ds_id in ["65", "1434", "1527"]:
    cnt = Counter(classify(r["title"]) for r in meta[ds_id])
    print(f"ds{ds_id}: {dict(cnt)}")
# ds65:   {'DEM-TXT': 113, 'オルソフォト': 112, '等高線DXF': 113, 'LAS点群': 0, ...}
# ds1434: {'DEM-TXT': 121, 'オルソフォト': 120, '等高線DXF': 121, 'LAS点群': 0, ...}
# ds1527: {'DEM-TXT': 65,  'オルソフォト': 187, '等高線DXF': 64,  'LAS点群': 64, ...}

# 図郭コード抽出(4桁: 500m タイル)
codes = set()
for r in meta["1527"]:
    m = re.search(r"_(03nf\d{4})_", r["title"])
    if m: codes.add(m.group(1))
print(f"ds1527 ユニーク図郭: {len(codes)}")  # 188

# 1km 親コード(3桁)との重複確認
codes_65  = {m.group(1) for r in meta["65"]
             if (m := re.search(r"_(03nf\d{3})_", r["title"]))}
parent_27 = {c[:7] for c in codes}  # 03nf + 3桁
overlap   = codes_65 & parent_27
print(f"重複 1km タイル: {len(overlap)}")  # 35

図郭コード重複分析

区分件数備考
ds65 3桁コード(1km タイル)11103nf プレフィックス
ds1527 4桁コード(500m タイル)18803nf プレフィックス
ds1527 親 3桁コード544桁 → 先頭 3桁に変換
重複タイル(ds65 ∩ ds1527 親)35H4: 支持(≥ 3)
ds1434 4桁コード12103od/03oe(別エリア)

考察

図 1 から、LAS は ds1527 のみ 64件保有し(H7: 支持)、 ds65/ds1434 は 0件。これが「初公開」の量的証拠である。
図 6 の図郭入れ子構造から(H6: 支持)、 ds65 の 1km タイル(3桁: 03nf263 等)は ds1527 の 500m タイル 4件 (03nf2631/2632/2633/2634)の正確な親タイルであることが確認された。 解像度向上(1m DEM → 0.5m DEM + LAS)に対応してタイル分割が細分化されている。
ds1434 は 03od/03oe プレフィックスを持ち、ds65/ds1527 とは別の地理エリアを担当(福山・三原方面と推定)。 3 データセットで「県内を分業して整備」する戦略が見える。
重複 35 タイル(H4: 支持)から、 ds1527 は ds65 と同一 1km 親タイル内の複数 500m タイルを再計測している。 同一エリアの経年比較(2014-18 vs 2022)が可能な地点が 35 か所存在する。

第 3 章 公開哲学の転換(RQ3)

狙い

DoBoX が「派生データのみ公開」から「raw 相当(LAS)追加公開」へと転換した事実を 6 観点で量的に実証し、その意義と限界を考察する。

図8: DoBoX 3次元計測データ 公開哲学の変遷 (2014 → 2023+)
図8: DoBoX 3次元計測データ 公開哲学の変遷 (2014 → 2023+)
図7: 派生(DEM-TXT)vs raw 相当(LAS)6 観点比較
図7: 派生(DEM-TXT)vs raw 相当(LAS)6 観点比較

6 観点比較表(再掲)

観点派生データ(DEM-TXT)raw 相当(LAS)
公開形式DEM-TXT(派生グリッドデータ)LAS(3次元点群 raw 相当)
解像度1m グリッド(ds65)/ 0.5m グリッド(ds1527)0.5m グリッド由来(txt2las 変換)
配布容量(推定)小(圧縮 BZ2、数 MB/タイル)中(BZ2 圧縮、数〜十 MB/タイル)
二次利用自由度グリッドのみ(DSM 演算に限定)点群ツール全般(CloudCompare 等)
ASPRS 分類該当なし(グリッド値のみ)class 0(未分類、再分類可能)
生成方法航空LiDAR → フィルタリング → グリッド補間DEM-TXT → txt2las 逆変換(2022年度)

H9 — 公開段階性の検証

ds1527 の resource 構成を確認すると、 DEM-TXT(65件)・等高線 DXF(64件)・ オルソフォト(187件)・LAS(64件)が存在する。 タイトルの命名規則や LAS ヘッダーの生成日(2023-06-16)から、 DEM-TXT が先に整備され、LAS は後から txt2las で変換追加されたことが示唆される(H9: 支持)。

考察

図 8 のタイムラインから、ds65(2014-18)・ds1434 の段階では 派生プロダクト(DEM/等高線/オルソ)のみ公開されていたが、 ds1527(2022年度取得、2023年度公開)で初めて LAS が追加された(H7: 支持)。
ただし、この「LAS 初公開」は真の raw 点群の公開ではなく、 txt2las (version 210418) を用いた DEM-TXT からの逆変換(H8: 支持)である。 元の航空レーザー計測全波形データは内部に存在したはずだが、 DoBoX 公開ポリシーでは格納されなかった。
この経緯は「公開しやすい派生データから始め、 ユーザーの二次利用ニーズに応えて段階的に raw 公開へ拡大する」 DoBoX の哲学的進化を示す。今後 ds65/ds1434 にも遡及的な LAS 公開が 行われる可能性は高く、その際はより高品質な ASPRS 分類付き LAS が期待される。

技術的意義: class 0(未分類)の LAS であっても、 PDAL / CloudCompare 等のツールで以下の二次利用が可能:
① 地表点フィルタリング(Ground filter → DSM 再生成)
② 機械学習ラベリング(半自動 ASPRS 分類付与)
③ 地形変化検出(ds65 と ds1527 の同一エリア差分)
「疑似 raw」でも公開価値は高く、今後の高精度 LAS 公開への橋渡し的意義を持つ。

仮説検証まとめ・発展課題

仮説検証まとめ(H1〜H9)

仮説テーマ実測値判定
H1地理的集中 ≥ 95%03nf 率 = 100.0%(64件中 64件)✔ 支持
H2LAS 1.4 + ASPRS + 密度 ≥ 8実際: v1.2, class 0 = 100.0%, density = 2.598✗ 不支持
H3タイル ≈ 500m × 500m実測: X=200.0m × Y=26.5m△ 要検証
H4重複図郭 ≥ 3重複 = 35 タイル(ds65×ds1527)✔ 支持
H5密度 > ds65 推定値 × 2ds1527=2.60 > ds65推定=1.0 × 2✔ 支持
H6図郭入れ子(3桁 ⊃ 4桁)3桁111件 ⊃ 4桁188件(1km ⊃ 500m)✔ 支持
H7ds65/1434=0 LAS, ds1527=64 LASds65=0, ds1434=0, ds1527=64✔ 支持
H8software = txt2lasheader.generating_software = txt2las (version 210418)✔ 支持
H9公開段階性(XML→DEM→等高線→オルソ→LAS)ds1527 形式構成で確認(LAS は最後に追加)✔ 支持

発展課題

  1. 64件全タイルの点密度地図: 全 64 LAS を順次 laspy で読込し、 タイル単位の点密度・点数分布を地図上に可視化する(要 cache builder スクリプト)。 本記事はサンプル 1 件のみ実測。
  2. 同一エリアの経年差分(ds65 vs ds1527): 重複 35 タイルを対象に ds65(1m DEM)と ds1527(0.5m DEM)の高さ差分を計算し、 9年間の地形変化(土砂崩れ跡・宅地造成等)を可視化する。
  3. ASPRS 分類の付与: class 0(未分類)の ds1527 LAS に PDAL や Python の scikit-learn を使って地表/植生/建物の簡易分類を付与し、 DEM-TXT との整合性を検証する。
  4. ds1434(03od/03oe エリア)の詳細分析: 本記事は ds1527(03nf: 三次・庄原)に特化。 ds1434 の 03od/03oe エリア(福山・三原方面と推定)の分析は未実施で、 広島県南部エリアの計測状況が不明。
  5. 真の raw LAS 公開の要望: txt2las 変換前の全波形 LAS が公開されれば 多重反射解析(植生透過 → 地表到達率)や建物屋根点分類が可能になる。 DoBoX への追加公開要望として提言できる。

実行時間: 1.2 秒