概要
OSMオブジェクト(主に建物)を選択した状態で、そのジオメトリと重複するPlateauオブジェクトを検索し、地図上にハイライト表示する機能の提案。
背景・動機
Plateauデータを使ったOSM編集において、「選択中のOSM建物に対応するPlateau建物はどれか?」を確認したい場面がある。現状ではPlateauレイヤーを手動でONにして目視で探す必要があるが、専用の操作があれば効率的に対応関係を把握できる。
提案する操作フロー
- ユーザーがOSM建物を選択
- 右クリックメニュー(またはキーボードショートカット)で「重複Plateauを検索」を実行
- ジオメトリが重複するPlateau建物があればハイライト表示される
- Plateauデータセットが無効の場合は自動的にONにする
技術的検討
活用できる既存コード
| 要素 |
既存コード |
説明 |
| ジオメトリ重複判定 |
MapWithAIService.js の _filterPlateauOverlaps() |
Polyclipライブラリによるポリゴン交差判定が実装済み。BBox事前フィルタ+正確なポリゴン交差の2段階処理 |
| Plateauデータの空間検索 |
Tree(空間インデックス) |
tree.intersects(extent, graph) でバウンディングボックス内のPlateau建物を高速取得可能 |
| OSM選択時のコンテキストメニュー |
SelectOsmMode.js + modules/operations/ |
既存の操作(移動・削除・回転等)と同じ仕組みで新操作を追加可能 |
| データセットの表示切替 |
RapidSystem.js の enableDatasets() / toggleDatasets() |
プログラム的にPlateauレイヤーのON/OFFが可能 |
想定される実装方針
-
新規 Operation の作成: modules/operations/find_plateau.js
operationFindPlateau(context, selectedIDs) として既存の Operation パターンに従う
available(): 選択中のエンティティが建物(polygon)であるかを判定
- 実行時: 選択中のOSM建物のジオメトリを取得 → Plateau空間インデックスで候補を絞り込み → Polyclipで精密判定 → ハイライト表示
-
ジオメトリ検索ロジック:
MapWithAIService.js の _filterPlateauOverlaps() のロジックを逆方向に流用
- 既存: Plateauを走査してOSMと重複するものを除外 → 新機能: OSMを起点に重複するPlateauを検索
- BBox事前フィルタ(高速) +
Polyclip.intersection() で精密判定
-
UI表示:
- 該当Plateauフィーチャーをハイライト表示(既存の
PixiLayerRapid のレンダリング機構を活用)
- Plateauデータセットが無効の場合は
rapid.enableDatasets('plateauJapan') で自動ON
考慮事項
- Plateauデータが未ロードの場合: z16以上でないとタイルデータが取得されない。必要に応じてAPIへのオンデマンド問合せが必要になる可能性あり
- パフォーマンス: 既存のBBox事前フィルタ+Polyclip判定で十分高速(既にconflation処理で実証済み)
- 対象ジオメトリ: 建物(ポリゴン)同士の比較が主。ポイントやラインの場合はバッファ距離の定義が必要
- UIトリガーの選択: 右クリックメニュー / キーボードショートカット / サイドバーボタン等、発見しやすさの検討
ラベル
enhancement
概要
OSMオブジェクト(主に建物)を選択した状態で、そのジオメトリと重複するPlateauオブジェクトを検索し、地図上にハイライト表示する機能の提案。
背景・動機
Plateauデータを使ったOSM編集において、「選択中のOSM建物に対応するPlateau建物はどれか?」を確認したい場面がある。現状ではPlateauレイヤーを手動でONにして目視で探す必要があるが、専用の操作があれば効率的に対応関係を把握できる。
提案する操作フロー
技術的検討
活用できる既存コード
MapWithAIService.jsの_filterPlateauOverlaps()Tree(空間インデックス)tree.intersects(extent, graph)でバウンディングボックス内のPlateau建物を高速取得可能SelectOsmMode.js+modules/operations/RapidSystem.jsのenableDatasets()/toggleDatasets()想定される実装方針
新規 Operation の作成:
modules/operations/find_plateau.jsoperationFindPlateau(context, selectedIDs)として既存の Operation パターンに従うavailable(): 選択中のエンティティが建物(polygon)であるかを判定ジオメトリ検索ロジック:
MapWithAIService.jsの_filterPlateauOverlaps()のロジックを逆方向に流用Polyclip.intersection()で精密判定UI表示:
PixiLayerRapidのレンダリング機構を活用)rapid.enableDatasets('plateauJapan')で自動ON考慮事項
ラベル
enhancement