Skip to content

選択中のOSMオブジェクトと重複するPlateauオブジェクトを検索・表示する機能 #4

Description

@nyampire

概要

OSMオブジェクト(主に建物)を選択した状態で、そのジオメトリと重複するPlateauオブジェクトを検索し、地図上にハイライト表示する機能の提案。

背景・動機

Plateauデータを使ったOSM編集において、「選択中のOSM建物に対応するPlateau建物はどれか?」を確認したい場面がある。現状ではPlateauレイヤーを手動でONにして目視で探す必要があるが、専用の操作があれば効率的に対応関係を把握できる。

提案する操作フロー

  1. ユーザーがOSM建物を選択
  2. 右クリックメニュー(またはキーボードショートカット)で「重複Plateauを検索」を実行
  3. ジオメトリが重複するPlateau建物があればハイライト表示される
  4. Plateauデータセットが無効の場合は自動的にONにする

技術的検討

活用できる既存コード

要素 既存コード 説明
ジオメトリ重複判定 MapWithAIService.js_filterPlateauOverlaps() Polyclipライブラリによるポリゴン交差判定が実装済み。BBox事前フィルタ+正確なポリゴン交差の2段階処理
Plateauデータの空間検索 Tree(空間インデックス) tree.intersects(extent, graph) でバウンディングボックス内のPlateau建物を高速取得可能
OSM選択時のコンテキストメニュー SelectOsmMode.js + modules/operations/ 既存の操作(移動・削除・回転等)と同じ仕組みで新操作を追加可能
データセットの表示切替 RapidSystem.jsenableDatasets() / toggleDatasets() プログラム的にPlateauレイヤーのON/OFFが可能

想定される実装方針

  1. 新規 Operation の作成: modules/operations/find_plateau.js

    • operationFindPlateau(context, selectedIDs) として既存の Operation パターンに従う
    • available(): 選択中のエンティティが建物(polygon)であるかを判定
    • 実行時: 選択中のOSM建物のジオメトリを取得 → Plateau空間インデックスで候補を絞り込み → Polyclipで精密判定 → ハイライト表示
  2. ジオメトリ検索ロジック:

    • MapWithAIService.js_filterPlateauOverlaps() のロジックを逆方向に流用
    • 既存: Plateauを走査してOSMと重複するものを除外 → 新機能: OSMを起点に重複するPlateauを検索
    • BBox事前フィルタ(高速) + Polyclip.intersection() で精密判定
  3. UI表示:

    • 該当Plateauフィーチャーをハイライト表示(既存の PixiLayerRapid のレンダリング機構を活用)
    • Plateauデータセットが無効の場合は rapid.enableDatasets('plateauJapan') で自動ON

考慮事項

  • Plateauデータが未ロードの場合: z16以上でないとタイルデータが取得されない。必要に応じてAPIへのオンデマンド問合せが必要になる可能性あり
  • パフォーマンス: 既存のBBox事前フィルタ+Polyclip判定で十分高速(既にconflation処理で実証済み)
  • 対象ジオメトリ: 建物(ポリゴン)同士の比較が主。ポイントやラインの場合はバッファ距離の定義が必要
  • UIトリガーの選択: 右クリックメニュー / キーボードショートカット / サイドバーボタン等、発見しやすさの検討

ラベル

enhancement

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions