空間演算子(等しい、互いに素、接触、範囲内、重複、交差、交差、包含、関連)を定義していますか?


9

承知しなければなりません。以下の空間演算子リストのセマンティクスについてはあまり深く掘り下げていません。私はユーザーの方です。ほとんどの場合、SQLを駆動するソフトウェアを作成していて、あまり考えていません。それについては多すぎる。

ただし、優れたインデックスがあり、これまで問題を引き起こしたことのないテーブルで、実行している空間操作が非常に遅くなる状況があります。

その結果、私は次のどれが使用するのが最善の策であるかを見つけようとしています。これにより、最高のパフォーマンスが得られます。ただし、必要なことがわかっていても、検索が何も返さない場合があります彼らがすべきでないときにものを返します。

だから私は誰かが私に実際の定義を与えることができるかどうか尋ねるように頼んでいます、例えば、以下の各操作の完全に囲むジオメトリ内、または外輪内など、一致する基準など:

Equals(Geom1, Geom2):int
Disjoint(Geom1, Geom2):int
Touches(Geom1, Geom2):int
Within(Geom1, Geom2):int
Overlaps(Geom1, Geom2):int
Crosses(Geom1, Geom2):int
Intersects(Geom1, Geom2):int
Contains(Geom1, Geom2):int
Relate(Geom1, Geom2):int

それらが一致する場合と一致しない場合の具体的な例を示すことができれば、それは素晴らしいことです。

参考までに、長方形ポリゴンを使用し、回転方向を指すように回転させた折れ線のテーブルを検索しています(これは、交通管理アプリの一部です)。

参考までに、検索を実行するためにアプリが生成するSQLのサンプルを以下に示します。

SELECT recordID,AsBinary(geometry) AS geometry,Distance(GeomFromText('POINT(-1.84101 54.85078)',4326), geometry) AS distanceFromGps FROM linegrid WHERE Intersects(GeomFromText('POLYGON ((-1.8413149820810311 54.850782468607292, -1.8409507853094111 54.850952257034713, -1.8408279009723911 54.850864894077496, -1.8411920982612455 54.850695105650068, -1.8413149820810311 54.850782468607292))'), geometry)

この例では、前述のように他のものを試す交差を使用しているので、期待した結果が得られないので、なぜ質問をしているのかがわかります。

現時点では、これを実際に高速化する方法や他の方法について特に気にする必要はありませんが、より良い方法を見つけたら、遠慮なく叫んでください:-)

今のところ、私が理解しようとしているのは、各操作の違いだけです。

より速く/より良くすることに関しては、後で別の質問をするつもりです。

参考までに、これが機能している空間エンジンはSpatilite 2.3.0であり、実行しているデバイスが最新のビルドを備えていないため、アップグレードできません(Windows CE)


ここではmintixの回答を選択します。これにより、非常に理解しやすいグリッドとさまざまな操作すべての説明が提供され、私の質問に回答しました。

私はまだルーチンのパフォーマンスを上げることに直面していますが、今それを試すためのいくつかの戦略があります。それに関してグループからまだアドバイスを求めることができます。

@Vinceも信用に値します。そのホワイトペーパーが決定的な答えであることは間違いありませんが、読むのは非常に困難です(何度か読み通す必要がありました)。ソリューションの開発中に簡単に理解できる概要が必要な場合は、FMEリンクを別のブラウザータブで開いてください。


スピードアップの可能性- ジオメトリが交差することをテストする前に、「MbrIntersects」との境界ボックスの交差をテストしてください。
user2856 2014年

ルークこんにちは。最初はMBRを使用しようとしましたが、回転できないことに気付きました。残念ながら、ボックスを回転させてGPS方位の方向を指すようにする必要があるため、多角形にする必要があります。しかし提案をありがとう。
shawty 2014年

MBRIntersectsテストのみを使用することは提案されていません。MbrIntersectsを使用して、Intersects関数がテストするジオメトリの数を減らしました。この方法で検索を絞り込むことは、オーバーレイを高速化するかなり標準的な方法です。
user2856 2014年

ああ、はい、読み直しました。あなたの意味がわかります。
Shawty

ライングリッドに多くの行があり、それらのほとんどをヒットしない場合は、空間インデックスが役立つ場合があります。
BradHards 2014

回答:


16

「Dimensionally Extended 9 Intersection Matrix」または略してDE-9IMを探しています。

DE-9IM by FME

そのFMEリンクには、上にリストした空間演算子の優れた例があります。これは、各述語属性の例と説明を含む3x3のtrue / falseマトリックスに分解されます。


ワオ!!リンクは非常に便利で、簡単にスキャンできました。少し後で詳しく説明します。
shawty 2014年

リンクが壊れています。
alphabetasoup

9

私が空間演算子の期待に使用する参照作業は、クレメンティーニペーパーです(「エンドユーザーインタラクションに適した形式的なトポロジー関係の小さなセット」、Eliseo Clementini、Paolino Di Felice、およびPeter van Oosterom、1993)。それは、内部、外部、および次元に関して、オペレーターの背後にある理論をレイアウトします。これにより、どの関係がどのタイプのどのオペレーターによってキャプチャされるかを推測する必要がなくなります。

すべての実装がClementiniオペレーターのすべての側面を尊重するかどうかは、残念ながら別の問題です。


ええ、そうですね。ITの世界は、誰もが決して名誉に思わないような標準でいっぱいです。情報のおかげで、私は紙のコピーを探しに行きます。
shawty 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.