ポイントセット操作の代替インデックス方法


17

多数の機能を使用する場合、パフォーマンスを向上させるために、境界ボックス空間インデックスを使用するのが一般的です。多数の頂点を持つ個々のジオメトリに対して操作が実行される場合、同様の最適化戦略が存在しますか?

たとえば、ポリゴンのポイントまたはユニオン操作を高速化できるデータ構造はありますか?


1
内部では、GISは、計算幾何学の教科書で説明されているさまざまな形式の四分木、DCELなどを含む、多くの特殊なデータ構造を使用します。これらの実装の詳細について尋ねているのですか、それともスクリプト言語内のユーザーが採用している可能性のあるメソッドについて問い合わせているのですか?
whuber

ありがとう、私は教科書を読む必要があると思う。私の質問のポイントは、それらのデータ構造を事前にどのように事前計算できるかでした。事前に計算された実装はありますか?
マシュースネイプ

マシュー、それは素晴らしい質問です。真のパフォーマンス指向のGISは、繰り返し適用するためにデータ構造を事前計算するオプションをユーザーに提供します。現状では、「GIS」として宣伝するソフトウェアは通常、「空間インデックス」の形式でのみ事前計算を提供しますが、MathematicaなどのGIS分析を実行できる汎用ソフトウェア(またはある程度R)はユーザーに提供しますそのようなものをはるかに制御します。
whuber

この問題は、2Dオブジェクトの「フラクタル性」と、不確実で不均衡な分布情報密度に基づいていると思います。
huckfinn 14年

回答:


2

[ポリゴン内のポイントのみ]でOK:

この問題は、2Dオブジェクトの「フラクタル性」と、空間情報の不確実で不均衡な分布に基づいていると思います。通常のグリッドがある場合、セルの位置または関係を簡単に計算できます。ただし、地形モデルの等値線では、複雑な部分が側面に、数学的に複雑な部分が反対側にあります(形態学的にアクティブな部分は尾根、谷など)。

インデックス作成では、次の2つのことを処理しようとします。

  1. 空間的に区別できるオブジェクト(バケット!)を収集する一連のバケットを提供する高速ルーチン。また、BBoxは計算と処理が簡単です。

  2. 空間的なもの(オブジェクト)を区別または関連付けるための一連の関係(オーバーラップ、タッチ)。

残念ながら、BBoxesは、各BBoxにあるポイントの数、オブジェクトの形状(穴、凸など)、および情報がローカルに分散される方法(ポイントの左上隅の90%のポイント)を提供しません。 BBox)。そのため、オブジェクトレベルで高速操作メンバーを見つけ、テストの関係構築で多くの時間を失う可能性があります。

より不規則なアプローチを使用するために、IMO三角形分割とand quadtreesを組み合わせた戦略では、バケットのインデックスとインデックスの関係構築部分を近づけることができます(バケット==関係構築)。

Point-in-Polygon-Testの例では、次を使用して不規則なキャッシュを構築できます。

  1. !カバーの外側を検出するための境界メッシュポイントが追加された、ポリカバーの制約付きドローネ三角形分割
  2. これをボックスごとにN個以下の三角形(フラクタルバケット)のクワッドツリーインデックススキームに入れます
  3. ポイントが属する三角形セットを見つける-四分木の葉
  4. ポイントが存在する三角形を見つけます(最大N個の三角形のテスト部分)
  5. 三角形の頂点のポリゴンIDを要求します
  6. IDが一意である場合、ポイントはポリゴンに属し、そうでない場合、ポイントは外部にあります

錫と四分木を構築するコストは非常に高く、計算が難しく、四分木は大小の三角形(小さなサブツリーボックスに収まらない三角形)のバランスを取る必要があります。

いくつかのツールとリンク:

三角形-制約ポリゴンの三角形分割

Quadtrees-ソースの例を使用

Stony Brook Repository-データ構造とディスクリートジオメトリ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.