承知しなければなりません。以下の空間演算子リストのセマンティクスについてはあまり深く掘り下げていません。私はユーザーの方です。ほとんどの場合、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リンクを別のブラウザータブで開いてください。