(有)徳永測量 社屋 - 3D地形モデル

92.8 x 90.1 m / 1050x1020 (850,732セル) / 6,231,929点

表示モード

30%

カラースキーム

20°
8x

表示切替

最小212.495%216.99
最大230.9650%221.12
範囲18.4895%227.39

着目標高 (m)

Z誇張 / 表示

1.0x

操作方法

左ドラッグ 回転   中ドラッグ パン
ホイール ズーム   左クリック 標高   右クリック 消去
中ボタン2連打 初期視点
保存しました

視点の方角 (どの方角から見るか)

視点の高さ (どの角度で見下ろすか)

N
231.0
212.5

(有)徳永測量 社屋 3D地形ビューア — 説明

使用データ

ファイル参照フォルダ内容技術的位置づけ
写真点群.lazMetashape成果フォルダUAV写真測量による3次元点群
6,231,929点 66.6MB
標高データの源。点群をグリッドビニングして1050x1020セルの標高メッシュを生成
数値写真 サイズ10K.tifMetashape成果フォルダ高解像度オルソモザイク画像
GeoTIFF 約245MB
3D地形にテクスチャマッピングする航空写真。GeoTIFF座標で自動位置合わせ
scheme.prj / .kmlMetashape成果フォルダ座標系定義ファイル JGD2011 平面直角座標第II系 (EPSG:6670) を定義。全データの空間参照
レポート.pdfMetashape成果フォルダMetashape処理レポート 座標系・処理パラメータ・標定結果等の記録

3D地形モデルの構成

本ビューアの3D地形モデルは、正規格子(グリッド)ベースの三角形メッシュで構成されています。
不整三角網(TIN)ではなく、点群を等間隔の格子に変換し、各格子を対角線で2つの三角形に分割する方式です。

#構成要素内容使用データ
1標高グリッドLAZ点群を 1050×1020 セルの等間隔格子に分割し、各セル内の点群平均標高を算出(グリッドビニング)写真点群.laz
6,231,929点
2三角形メッシュ格子の各マスを対角線で2分割し三角形を生成(PlaneGeometry)。点群が存在しない範囲はマスク処理で除去し、地形の輪郭を形成(標高グリッドから自動生成)
3テクスチャGeoTIFFオルソ画像を3D地形面に貼り付け。座標系が同一(EPSG:6670)のため回転・縮尺の調整不要で自動位置合わせ数値写真 サイズ10K.tif
GeoTIFF
4頂点カラー標高値を色に変換。表示モード(標高カラー・傾斜量図・微地形強調等)に応じて各頂点の色を切替(標高グリッドから計算)
5陰影起伏地表面の法線ベクトルと仮想太陽光の内積で陰影を計算。地形の凹凸を視覚的に強調(標高グリッドから計算)
6三角網表示三角形メッシュの辺を黒線で描画(「三角網」チェックボックスで表示切替)(メッシュ構造の可視化)
7ライティング環境光 + 指向性光源×2 による立体感の付与(Phong陰影モデル)(レンダリング設定)

処理の流れ:

LAZ点群 6,231,929点グリッドビニング 1050×1020セル三角形メッシュマスク適用 有効850,732セルテクスチャ/色付けThree.jsで3D表示

※ グリッドのセルサイズは点群の範囲(92.8m × 90.1m)を格子数で割った値。
※ 「三角網」チェックONで、三角形の辺が黒線で確認できます。

座標系・位置合わせ

Metashape成果の全出力(点群・オルソ・DSM)は同一座標系 EPSG:6670を共有。
そのため回転=0°、スケール=100%、オフセット=0で自動位置合わせが成立。手動調整は不要。

使用技術

技術用途
Three.js r0.160WebGL 3Dレンダリング(PlaneGeometry + OrbitControls)
CanvasTexture + sRGBオルソ画像の正確な色再現(頂点カラー方式では色褪せが発生するため)
laspy + チャンク読込2GB超の.lazファイルをメモリ効率的に処理(500万点/チャンク)
GeoTIFFクロップオルソ画像を点群範囲でピクセル精度でクロップ
陰影起伏解析地表面の法線ベクトルと仮想太陽光の内積で陰影を計算

表示モード

モード内容
オルソ画像航空写真をそのまま3D地形にマッピング
オルソ+陰影航空写真 × 陰影起伏(地形の凹凸が強調される)
標高カラー+陰影標高値を色分け + 陰影起伏
傾斜量図地表の傾斜角度を可視化
微地形強調(CS風)曲率+傾斜で微細な地形変化を検出

操作方法

操作機能
左ドラッグ回転
中ドラッグ / 右ドラッグパン(平行移動)
両ドラッグ(左右同時押し)ズーム(上→拡大、下→縮小)※Jw_cad風
マウスホイールズーム
左クリックその地点の標高値を表示
右クリック標高表示を消去
中ボタンダブルクリック初期視点にリセット

データ仕様

国土地理院 背景タイル

3Dモデルの周囲に、国土地理院の地図タイルを3D背景として表示しています(中央は地形モデル本体)。

項目内容
航空写真seamlessphoto シームレス空中写真(z=16, 約2.4m/px)
標準地図std 電子国土基本図・標準地図(z=16)
標高データdem5a_png 5mメッシュDEM → 3D地形化(z=15)
表示範囲3Dモデル周囲の約3倍エリアを立体表示(中央くり抜き)
座標変換pyproj EPSG:6670 → WGS84
用途地区周辺の地形・道路・建物等の立体的な位置関係を把握

出典: 国土地理院(https://maps.gsi.go.jp/development/ichiran.html)
この地図の作成に当たっては、国土地理院長の承認を得て、同院発行の基盤地図情報を使用した。

開発方法

本ビューアは、Claude Code(Anthropic社のAIプログラミングアシスタント)が、Pythonスクリプト generate_3d_viewer.py を自動生成・更新し、Metashape成果データ(.laz点群・GeoTIFFオルソ・GCP座標等)を 読み込んで、単一HTMLファイル(Three.js 3Dビューア)に変換する方式で開発されています。

開発者が要件や修正を日本語で指示すると、Claude Codeがコードの調査・設計・実装・検証を一貫して行い、 Playwright自動テストによる品質保証まで含めて1つのワークフローとして実行します。

今後、別の地区・工区でも同じ方式で3Dビューアを作成できます。必要なデータ(.laz点群・GeoTIFFオルソ・SIMA座標等)を用意し、 同様の手順でPythonスクリプトを実行すれば、新しい3Dビューアを自動生成できます。

GitHub Pages による公開

本ビューアは GitHub Pages を利用してインターネット上に公開されています。

項目内容
GitHubとはプログラムのソースコードをバージョン管理・共有するためのクラウドサービス(Microsoft社)
GitHub PagesとはGitHubのリポジトリ(保管庫)にHTMLファイルを置くだけで、Webサイトとして無料で公開できる仕組み
仕組み① Pythonスクリプトが単一HTMLファイルを生成 → ② GitHubリポジトリにアップロード(push) → ③ GitHub Pagesが自動的にWebサイトとして配信
URLhttps://toku1107-cyber.github.io/tokunaga-3d-terrain/
アクセスGitHub PagesのPUBLICリポジトリなのでURLを知っていれば誰でもアクセス可能
更新方法Claude Codeが新しいHTMLを生成し、GitHubにpushすると数分で自動反映

スキル(経験の蓄積)と本ビューアへの具体的な貢献

Claude Codeは、作業中に遭遇した問題・解決策をスキルファイル.agent/skills/)として自動記録します。 スキルは「過去の経験の結晶」であり、次回同種の作業を行う際に同じ失敗を繰り返さないための仕組みです。 本ビューアの開発では、以下のスキルが具体的に活用されました。

スキル名格納先本ビューアへの具体的な貢献
3d-terrain-ortho-viewer.agent/skills/3d-terrain-ortho-viewer/ 本ビューアの中核スキル。LAZ点群→グリッドビニング、GeoTIFFアライメント、Three.js PlaneGeometry、CanvasTexture sRGB色補正、陰影起伏解析など、全ての3D表示技術の知見を蓄積。
新しい地区で作成する際、このスキルを読み込むことで初回と同じ試行錯誤を回避できる
10-agent-architecture.agent/skills/10-agent-architecture/ 品質保証ワークフロー。PM(要件整理)→ アーキテクト(調査)→ ディスパッチャー(タスク分割)→ 実装 → セルフレビュー → QAの一貫プロセスを適用。
「いきなりコードを書かない、まず調査」の原則により、既存コードとの整合性を確保
windows-terminal-emoji-encode-fix.agent/skills/windows-terminal-emoji-encode-fix/ Windows環境でのPython実行時、cp932エンコードエラーを回避。
sys.stdout.reconfigure(encoding='utf-8')をスクリプト冒頭に必ず適用するルール
no-overconfidence-protocol.agent/skills/no-overconfidence-protocol/ 「原因が特定できました」の禁止ルール。AIが100%の断定をせず、仮説ベースで報告する義務。
「修正します→できていません」の往復ループを防止
excel-screenshot-verification.agent/skills/excel-screenshot-verification/ スクリーンショットによる目視検証手法を、HTMLビューアの品質確認に応用。
Playwrightでスクリーンショットを撮影→Read toolで画像確認→レイアウト崩れ等を検出

スキルの仕組み: 難航した経験(差し戻し2回以上、試行錯誤30分以上等)が自動的にスキルとして記録される。 次のセッションでClaude Codeは作業前にスキルを読み込み、「前回のハマりポイント」を事前に把握して着手するため、同じ問題での停滞が激減する。

次回、同種の3Dビューアを作成するには

別の地区・工区でも同じ方式で3Dビューアを作成できます。以下に、人間側の準備とClaude Codeへの指示方法をまとめます。

① 人間が事前に用意するもの

#ファイル入手元必須/任意備考
1写真点群.lazMetashape成果★必須2GB超でも処理可能(チャンク読込)
2数値写真(オルソ).tifMetashape成果★必須サイズ10K推奨。GeoTIFF形式(座標埋込)
3scheme.prj / .kmlMetashape成果★必須座標系定義。オルソTIFと同じフォルダ
4GCP/SIMA座標現場測量任意基準点・水準点を地図上に表示
5筆界データG空間情報センター任意登記所備付地図XML(ZIP形式)
6路線データ路線測量SIMA任意結線情報ありのSIMAファイル

② Claude Codeへのコピペ指示文(テンプレート)

新しいセッションで以下をコピペして貼り付けるだけで、Claude Codeが作業を開始します。
【】内を実際のパスに置き換えてください。

3D地形ビューアを作成してください。
CLAUDE.mdを厳守してください。

■ スキル読込(最初に必ず実行)
.agent/skills/3d-terrain-ortho-viewer/SKILL.md

■ 作業フォルダ
【G:\マイドライブ_MyAI_Workspace\...\作業フォルダ名】

■ 入力データ
- 点群: 【フォルダ内の】写真点群.laz
- オルソ: 【フォルダ内の】数値写真 サイズ10K.tif
- 座標系: 【フォルダ内の】scheme.prj, scheme.kml
- GCP: 【パス】.sim (任意)
- 筆界: 【パス】.zip (任意・G空間情報センター)
- 路線: 【パス】.sim (任意・結線ありSIMA)

■ 出力
- 単一HTMLファイル(Three.js 3Dビューア)
- GitHub Pages配信(希望する場合)

■ 地区名・タイトル
【例: (有)徳永測量 社屋】 / 【例: R7○○地区】

③ Claude Codeが質問する内容(Ask User Question)

作業中に以下のような質問をする場合があります。事前に把握しておくとスムーズです。

質問意味回答例
SIMA座標系は平面直角II系ですか?座標の解釈に必要「はい、II系です」
筆界ZIPに複数地域が含まれますが対象は?必要な範囲を絞り込む「対象地区周辺のみ」
路線のZ値は計画高ですか、現況高ですか?表示方法に影響「全てZ=0なので地形に沿わせて」
GitHub Pagesで公開しますか?インターネット公開の要否「はい」/「今回は不要」
国土地理院背景は必要ですか?周辺の地図表示「はい、航空写真+標準地図」

生成: generate_3d_viewer.py (v23) | Metashape成果データ → HTML変換
(有)徳永測量 社屋 — 自社案件