KASUGAI Canvas v6.17.0

ライブラリ — 主要ライブラリと描画基盤

ライブラリ

KASUGAI Canvas を構成する主要ライブラリについてまとめる章。基本は CesiumJS + Three.js。3D Tiles・DEM 上への XYZ 重ね合わせなど、地球規模の 3D 表示が必要な箇所は CesiumJS を主軸とする。

推奨構成:KASUGAI Canvas

役割 ライブラリ 備考
3D 地球・3D Tiles・DEM ドレープ・XYZ 重ね合わせ CesiumJS KASUGAI Canvas の 3D 描画の核。地球規模 LOD・地形・イメージリレイヤー・3D Tiles をネイティブに扱う
点群・3DGS・高度な 3D 表現 Three.js GLB / 点群 / 3DGS エコシステム。Cesium 内のエンティティ / プリミティブと連携
ベクターデコード / SQL 絞り込み hyparquet / flatgeobuf / DuckDB-WASM GeoParquet・FlatGeobuf・Parquet/CSV/GPKG 等をブラウザ内で デコードし GeoJSON へ正規化(vectorDecoders レジストリ経由)

地図エンジン(フロントエンジン)の選定と追加候補

web/ はエンジン別フロントを並べるマルチエンジン構成 (?engine= で切替)ですが、開発の基本としてメインエンジンは CesiumJS です。新機能・UI・AI 制御対応はまず Cesium フロント (web/cesium/)を対象とし、他エンジンは .kasc プロジェクトの再生プレイヤーとしての互換実装です。プロジェクトデータは エンジン非依存の projects/ に置き、web/shared/ の .kasc ローダー・ベクターデコーダー・QML コンパイラを全エンジンで 共有するため、新しい 2D エンジンの追加コストは比較的小さくなっています。

現在のエンジン構成

エンジン 位置づけ 特性 .kasc 対応
CesiumJS メイン(既定) 3D グローブ・3D Tiles・DEM ドレープ・TerrainProvider をネイティブ 対応する唯一のフル機能エンジン。SCENE2D で真上視点の 2D も可。 フットプリントは大きいが KASUGAI の全機能(FLY・AI ツール・プラグイン)はここに集約 全行タイプ対応(3dtiles: 含む)
MapLibre GL 2D プレイヤー WebGL ベースの 2D ベクタータイルエンジン(Mapbox GL v1 フォーク・ OSS)。MVT ベクタータイルをネイティブ描画でき、回転・傾斜表示も可能。 スタイル仕様がデファクト標準(QGIS・geo_webview の /maplibre 配信とも整合) 2D 行・QML・duckdb/sql・属性 UI・3dtiles: (deck.gl Tile3DLayer を必要時のみ遅延ロード)実装済み。 3D Tiles ドレープ(deck.gl TerrainExtension)にも対応
OpenLayers 2D プレイヤー OGC 準拠最良の 2D エンジン。WMS/WMTS/WFS・多様な投影系・ラスタ 演算に強く、Canvas レンダリングで WebGL 要件が緩い。QGIS 系ツール (QGIS2Web・Lizmap)との親和性が高い MapLibre 相当(QML・duckdb/sql・属性 UI)
Leaflet 2D プレイヤー 約 40KB の超軽量 2D エンジン。WebGL 不要の DOM/SVG 描画で 古いブラウザでも動作。専用 pane にレイヤーを割り当てて .kasc の積み順を再現(ラスタ・ベクター混在も順序保持)。地図回転は 非対応のため回転系設定は設けていない MapLibre 相当(QML・duckdb/sql・属性 UI・インスペクター・3dtiles: (deck.gl Tile3DLayer をオーバーレイキャンバスで必要時のみ遅延ロード))
GSI Maps 中間エンジン(調整中) vendored 地理院地図(gsi-cyberjapan/gsimaps)を同一オリジン iframe で 組み込み、上流コード無改変のまま中間層が GSI/Leaflet API 経由で .kasc を再生。地理院地図の標準 UI(情報リスト・Globe 等)をそのまま利用でき、 Globe 表示時は .kasc レイヤを Cesium 注入で 3D 表示する ベクター行→作図リスト注入、base:/xyz:/wms:/wmts:→外部タイル。 cam:/theme:・属性 UI 対応。地理院地図の表示レイヤを xyz: 行として .kasc へ取り込み可。3dtiles: 等は未対応
Navara 試験的(写実 3D) @navaramap/three(Rust/WASM GIS コア + Three.js)による 写実 3D プレゼンエンジン。大気散乱・太陽・影のフォトリアルシーンと quantized-mesh 地形(Re:Earth Terrain)を持つ。ライブラリは npm dist スナップショットを vendor/navara/ にピン留めし importmap で読む(Worker が import.meta.url 相対のため同一オリジン必須) ベクター行・base:/xyz:・3dtiles:・ cam:/theme: 対応。wms:/wmts:・ 3D Tiles ドレープ・地物単位の凡例フィルタは未対応

追加候補エンジンの優先順位

評価軸: ①ライセンス(OSS か)、 ②メンテナンス状況、③web/shared/ の .kasc 基盤を再利用できるか(移植コスト)、 ④既存 3 エンジンでは埋まらない用途があるか。

優先度 エンジン 特性・採用理由 用途・条件
中 deck.gl(オーバーレイ) 単独エンジンではなく MapLibre/Cesium 上に重ねる大規模データ 可視化レイヤ(ArcLayer・GridLayer・HexagonLayer・TripsLayer 等)。 MapboxOverlay で maplibre フロントに統合可能 数十万点規模の密度・集約・軌跡表現が要件化した場合
中 ol-cesium(olcs)(連携方式) 新エンジンではなく OpenLayers 2D ↔ Cesium 3D のカメラ同期ライブラリ。 openlayers フロントで編集しながら cesium の 3D 確認を同時に行う 2D/3D 連動ビューを実現できる 2D/3D 連動表示が欲しくなった場合(同期モードとして実装)
中 Potree(点群特化) EPT/COPC 形式の大規模点群に特化した three.js 系ビューア。 Cesium の 3D Tiles(pnts)でも代替可能だが、LAS/LAZ の大量点群を そのまま軽快に見せる用途では専用ビューアに分がある kasuga_converter(PDAL 経路)の点群成果物の納品が要件化した場合
中 Maptalks 2D + 2.5D + 3D を1ライブラリで扱うハイブリッド(three.js 統合・ 地形対応)。OpenLayers 的 API で 3D 建物まで描ける。活発に開発中だが 日本語情報・採用実績は少ない OL の手軽さで軽い 3D まで欲しい場合(代替検討枠)
低 iTowns IGN(フランス国土地理院)の three.js ベース 3D エンジン。 グローブ・3D Tiles・点群に対応し Cesium より軽量だが、 エコシステムが小さく役割が Cesium と重複 Cesium が重すぎる環境での軽量 3D が必要になった場合
低 Mapbox GL JS MapLibre の本家。v2 以降はプロプライエタリで、スタイル仕様は MapLibre と互換のため既存 maplibre フロントで事実上代替済み Mapbox 独自サービス(Mapbox タイル・Search 等)を使う場合のみ
低 Google Maps JS API / ArcGIS Maps SDK 商用・API キー・課金必須。ベンダーロックインが .kasc の中立性(エンジン非依存のプロジェクト形式)と衝突する 顧客要件で明示指定された場合のみ
低 globe.gl / three-globe 最小構成の three.js 地球儀。デモ・可視化特化で、地図レイヤ体系 (XYZ・ベクター・属性)は自前実装が必要 簡易 3D グローブのデモが必要な場合
低 Mapillary JS / Panoramax ビューア(特殊用途) 街路画像の専用ビューア。地図エンジンではなく連携ウィジェットとして 既存フロントに組み込む性質のもの kasugai_box の画像連携など、地点写真ビューアの構想が具体化した場合

参考(不採用): Tangram(Mapzen の WebGL ベクタータイルレンダラ)と harp.gl(HERE)は いずれも開発が停止しており、新規採用の対象外です。

KASUGAI Canvas で可能な表示モード

表示モード 可否 説明
平面(2D 地図・図面) ◎ CesiumJS SceneMode.SCENE2D(真上視点の 2D 地図表示)
3D パース(3D モデル・点群・3DGS) ◎ Cesium Cesium3DTileset / Model + Three.js 点群・3DGS レンダラー
地形(DEM ドレープ) ◎ Cesium TerrainProvider / CesiumWorldTerrain + ImageryLayer
グローブ(球形地球儀) ◎ CesiumJS はデフォルトで地球儀表示を扱う。グローブ / ローカル 3D 空間の切り替えが可能

データ種別別のライブラリ選択

データ CesiumJS Three.js 備考
3D Tiles / GLB ◎ ◯ Cesium Cesium3DTileset / Model でネイティブ表示。PLATEAU も直接読み込み
DEM / 標高PNG ◎ △ Cesium TerrainProvider で高精細地形。 地理院標高PNG は GsiDemTerrainProvider でデコード済み。XYZ を ImageryLayer としてドレープ
XYZ / TMS / WMS ◎ △ Cesium ImageryLayer / UrlTemplateImageryProvider で曲面・地形にドレープ
GeoJSON ◎ △ Cesium GeoJsonDataSource(entity 描画)/ GeoJsonPrimitive(バッチ描画・ render=primitive)
バイナリベクター (GeoParquet / FlatGeobuf) ◎ △ geoparquet: / flatgeobuf: / duckdb: / sql: でブラウザ内デコード → GeoJSON 正規化経路へ
2D タイル (MVT) △ △ 現行未実装。XYZ ラスタタイルは ImageryLayer で対応。MVT はタイル/大規模経路として将来候補
点群 (PLY/LAS/EPT) ◯ ◯ Cesium Cesium3DTileset(pnts / 3DTiles_next)or Three.js Points / Potree
3DGS (PLY/SPZ/Splat) △ ◎ Three.js 系専用レンダラー

CesiumJS の強力機能

機能 用途例
ImageryLayer / ImageryProvider XYZ / TMS / WMS を地球/地形へ重ね合わせ。前後関係は ImageryLayerCollection で管理
TerrainProvider DEM / 標高PNG・CesiumWorldTerrain 等で 3D 地形を構築
Cesium3DTileset PLATEAU 等の大規模 3D Tiles をネイティブ LOD・カリングで描画
ClippingPlaneCollection / ClippingPlane 3D Tiles・点群の断面カット
ClassificationPrimitive / Vector3DTilePrimitive 3D 地形・建物へのドレープ・クラシフィケーション
GeoJsonPrimitive / GroundPrimitive ベクターの地形・3D Tiles への高速ドレープ(ベクター高速ドレープ / render=primitive)

点群・3DGS 用ライブラリ

ライブラリ 点群 (LAS/PLY/EPT) 3DGS (PLY/SPZ/Splat) 特徴
CesiumJS ◯ (3D Tiles pnts / 3DTiles_next) △ (要カスタムレンダラー) 大規模点群を地球規模で描画。3DGS は現状最適化されていない
Three.js ◯ (BufferGeometry) ◎ (gaussian-splats-3d / Splat Viewer) 3DGS エコシステムが最も充実
Potree ◎ (専用点群レンダラー) ❌ 大規模点群 Web 可視化特化
PlayCanvas SuperSplat ❌ ◎ 3DGS 専用ビューアー。変換・最適化にも強い

CesiumJS + Three.js の連携パターン

現行実装:オーバーレイ canvas + カメラ同期

将来候補:同一 WebGL コンテキストでの統合

補完ライブラリ

用途 ライブラリ 説明
座標変換 proj4.js / coordsys 平面直角座標 ↔︎ WGS84 等の変換
GPKG 読込 sql.js(SQLite WASM・Web Worker) gpkg: / duckdb:(.gpkg)でブラウザ内読込 → GeoJSON 正規化(実装済み)
Shapefile 読込 DuckDB-WASM(spatial 拡張 ST_Read) duckdb: の format=read。非 COI 環境・リモート URL では動作しないため実質未対応
GeoParquet デコード hyparquet CDN から遅延ロード。WKB / ネイティブ GEOMETRY → GeoJSON
FlatGeobuf デコード flatgeobuf 公式 JS リーダー CDN から遅延ロード。ストリームで逐次 GeoJSON Feature 化
FGDB 変換 ogr2ogr(サーバー or 事前変換) プロプライエタリ形式をブラウザ内では読みにくいため、サーバー or 事前変換で対応
点群変換 Potree Converter / entwine PLY/LAS → EPT / 3D Tiles