KASUGAI Canvas v6.17.0

マルチエンジン — 各機能カードの詳細説明

← 機能と実装へ戻る

マルチエンジン

web/ をエンジン別フロントに分割し、.kasc プロジェクトを複数の地図エンジンで再生できる構成です。メインエンジンは CesiumJS(開発の主対象・既定エンジン)で、MapLibre / OpenLayers / Leaflet / GSI Maps(※現在調整中)/ Navara(※試験的)は .kasc プレイヤーとしての互換実装です。プロジェクトデータ(projects/)はエンジン非依存で、描画に依存しないコードは web/shared/ に集約しています。

ねらい: 同じ .kasc を「高機能3D(Cesium)」「軽量2D(Leaflet 等)」「地理院地図の UI(GSI Maps)」など、配布先の環境・用途に合ったエンジンで開けます。納品物は .kasc+DATA/+エンジン一式の静的ファイルだけで成立し、受け取り側がエンジンを選ぶ余地も残せます。

🧭 エンジン構成

フォルダ エンジン 位置づけ・対応範囲
cesium/ CesiumJS(メイン・既定) 全行タイプ(3dtiles: 含む)・FLY・AI ツール・プラグイン・地形/DEM ドレープ・SCENE2D。KASUGAI の全機能が集約される唯一のフル機能エンジン
maplibre/ MapLibre GL(2D プレイヤー) WebGL ベースの 2D エンジン。全ベクター行・QML・duckdb/sql・属性 UI・6 タブパネル。3dtiles: は deck.gl Tile3DLayer を遅延ロードし、TerrainExtension による 3D Tiles 表面ドレープにも対応。回転・傾斜表示可
openlayers/ OpenLayers(2D プレイヤー) OGC 準拠最良の 2D エンジン。MapLibre 相当の .kasc 再生(QML・duckdb/sql・属性 UI)。Canvas レンダリングで WebGL 要件が緩い
leaflet/ Leaflet(2D プレイヤー) 約 40KB の超軽量 2D エンジン。WebGL 不要の DOM/SVG 描画で古いブラウザでも動作。専用 pane にレイヤーを割り当てて .kasc の積み順を再現(回転系設定なし)。3dtiles: は deck.gl オーバーレイキャンバスで遅延ロード
gsimaps/ GSI Maps(中間エンジン・調整中) vendored 地理院地図(gsi-cyberjapan/gsimaps)を同一オリジン iframe で組み込み、.kasc を GSI/Leaflet API 経由で再生。上流コードは無改変で、変換・制御はすべて中間層が担う(下記「GSI Maps エンジン」節)
navara/ Navara(試験的・写実3D) @navaramap/three(Rust/WASM GIS コア + Three.js)による写実 3D プレゼンエンジン。ベクター行・ラスタ行・3dtiles:・cam:/theme: を再生し、大気・太陽光のフォトリアルシーンと quantized-mesh 地形を持つ。wms:/wmts:・3D Tiles ドレープは未対応(下記「Navara エンジン」節)

各エンジンの特性比較と追加候補の評価は ライブラリ — 地図エンジンの選定と追加候補 を参照してください。

🔀 エンジン選択と切替

📄 カレント状態ファイル(session-state)

.kasc がプロジェクトの初期値であるのに対し、カレント状態ファイルは稼働中の現在値(カメラ位置・表示レイヤ・テーマ・ベースマップ・インスペクタの編集中テキスト)を保持するエンジン共通の正典ドキュメントです。物理ファイルではなく localStorage の1レコード(キー kasugai:session-state、JSON)として常駐し、読み書きはすべて shared/session-state.js に集約されています。

正典は Cesium 規約です(メインエンジンが CesiumJS であり、URL ハッシュと cam: 行も同規約のため)。各エンジンは自形式 → Cesium 規約へ書き込み時に正規化し、読み込み時に自形式へ変換します。

スキーマ(v: 1)

フィールド型内容
v / at / enginenumber / number / stringスキーマ版・最終更新時刻(ms)・最後に書いたエンジン ID
project / kascstring|null書込み時点の ?project= / ?kasc=(適用はこれらの完全一致が条件)
cameraobjectlatitude/longitude(deg)・height(m・楕円体高)・zoom(256pxタイル基準・正典 height から導出。URL ハッシュ自体に zoom キーは無い)・pitch(直下=-90・水平=0)・heading(北=0・時計回り)。すべて Cesium 規約の正典値
inspectorstring現在の .kasc テキスト全文(ファイル内容ではなく編集後を含む現在値)
themestring|null#theme-select の選択値(theme: 名。未選択は null)
basemapobject{id, title}(選択中ベースマップ。title は base: 行の item.title 正典)
visobject{完全タイトル: bool}(listLayers() の title を「グループ/名前」へ正規化した可視性マップ)

ライフサイクル

.kasc(プロジェクトの初期値)と session-state(稼働中の現在値)は役割が異なります。起動したエンジンは .kasc を一度読んで session-state(現在値)を構築し、以後はすべてのエンジンが session-state を正典として常時参照・更新します — 切替先エンジンも別ドキュメントではなく同じこの正典を引き継ぎます:

sequenceDiagram
    autonumber
    participant K as .kasc
初期値(プロジェクトファイル・不変) participant A as エンジンA
(起動) participant S as session-state
現在値(localStorage・常駐・正典) participant B as エンジンB
(切替先) K->>A: 起動時に読み込む (初期値) A->>S: 現在値を構築(以後は S が正典) loop 稼働中は常時 A->>S: 状態変化のたび更新
(イベント駆動) end A->>B: engine リンクで遷移
(クエリ・ハッシュ継承) Note over B: 起動は A と同じ構造。
正典を読んで開始するだけ B->>S: 起動時に正典を読み込む
(消費1回ガード) loop 稼働中は常時 B->>S: 状態変化のたび更新 (イベント駆動) end Note over K: .kasc は初期値のまま不変。
稼働中の正典は常に session-state

復元の照合ルール

命名規則と拡張方針(2段ルール)

ドキュメントのルート直下に無印で並ぶフィールドはすべて Cesium 規約の正典値と決め、それ以外の値は名前で区別します。将来の拡張(グループ展開状態・凡例フィルタなど)は v を据えたままフィールド追加で行い、以下の規則に従います:

🧩 エンジン非依存コア(web/shared/)

エンジン横断のコードは shared/ に集約し、各エンジンの app.js は描画層と薄いアダプタを持つ構成です。新しい 2D エンジンの追加は「shared の各モジュールを使い回し、描画フックだけ実装する」形で行えます。

🗺️ 2D プレイヤー(MapLibre / OpenLayers / Leaflet)

3 エンジンはほぼ同機能の .kasc プレイヤーで、左パネルの 6 タブ(レイヤ・凡例・検索・属性・カメラ・情報)+表示・インスペクター・AI の各タブを持ちます。

🗾 GSI Maps エンジン(地理院地図組み込み・調整中)

vendored 地理院地図(web/vendor/gsimaps/・上流無改変)を同一オリジン iframe(index_pm.html)として組み込み、左の中間層パネルが .kasc を GSI/Leaflet API 経由で再生します。

GSI Maps エンジン:左の中間層パネル(情報タブ・AI チャット)とエンジン切替フッタ

※現在調整中: iframe 内の vendored コードを GSI.GLOBALS 内部 API 経由で操作する構造のため AI 制御の安定化が難しく、本エンジンの挙動・ツール仕様は今後変更される可能性があります。

🌍 Navara エンジン(試験的)

@navaramap/three(Navara の Rust/WASM GIS コア + Three.js レンダラ)で .kasc を再生する試験的エンジンです。Cesium とは別系統の 3D 描画で、大気散乱・太陽・影のフォトリアルシーン(addDefaultPhotorealScene)と Re:Earth Terrain(quantized-mesh)の地形を備え、写実的な 3D プレゼン用途を検証する位置づけです。エンジン切替 UI では [navara] と括弧付きで表示され、試験的エンジンの目印になっています(ENGINE_LABELS の [] 表記)。

📄 プロジェクト直読み(?kasc=)とサーバレス配信

🌐 CDN ホスト版(kasugai-canvas-web)

エンジン一式(web/)を CDN ライブラリのように静的配信する専用ホストが kasugai-canvas-web(GitHub Pages)です。「アプリはホスト・データはローカル(または任意 URL)」の構造で、KASUGAI Canvas 未インストールの環境でも .kasc+DATA/ をブラウザ再生できます。

⚙️ 開発ルール(マルチエンジン前提の設計)