2

ES に 2 つの geo_shapes があります。私が把握する必要があるのは、形状の 1 つ (緑) が別の形状 (赤) を含むか交差するかを理解するための最良の方法です。以下の 3 つの異なるケースの視覚的表現を参照してください。

ケース I : 簡単に検出できます - 緑の形状座標を使用して、「関係」=「範囲内」で Geoshape クエリを作成します</p>

ケース II : これも問題ありません。緑色の形状座標を使用して、「relation」=「INTERSECTS」で Geoshape クエリを作成します。</p>

ケース III : これは本当の問題です - 緑色の形状座標を使用して、「relation」=「INTERSECTS」で Geoshape クエリを作成しようとすると、結果として赤色の形状が返されます...これは誤りです - この形状は互いに交差しません (私はそう思います)一方の側面が互いに接触しているにもかかわらず….

ここで偽陽性の結果を回避する方法はありますか? このタスクを解決するための他の提案はありますか?

PS座標は正確です(例:13.335594692338)。tree_levels や precision などの追加のマッピングはありません...

ここに画像の説明を入力

4

1 に答える 1

5

geoshape を使用して Elasticsearch に格納されているすべてのポリゴンは、文字列のリストに変換されています。この説明を少し絞り込むために、Elasticsearch に格納しているポリゴンが geohash ストレージ (geoshape タイプのデフォルト) を使用していると仮定します。

詳細は省きますが、こちらの画像をご覧ください。

ジオハッシュ

そして、Elasticsearch docs から取られたこの説明 (詳細は一致しませんが、全体像を把握する必要があります):

ジオハッシュは、世界を 32 個のセル (4 行 8 列) のグリッドに分割し、それぞれが文字または数字で表されます。g セルは、グリーンランドの半分、アイスランドのすべて、および英国の大部分をカバーしています。各セルはさらに別の 32 個のセルに分割でき、さらに別の 32 個のセルに分割できます。gc セルはアイルランドとイングランドをカバーし、gcp はロンドンの大部分とイングランド南部の一部をカバーし、gcpuuz94k はバッキンガム宮殿への入り口で、約 5 メートルの精度です。

ポリゴンは長方形のリストに投影され、それぞれが文字列 (geohash) で表されます。この投影の精度は、ツリー レベルに依存します。Elasticsearch のデフォルトのツリー レベルはわかりませんが、誤検知が見つかった場合は、低すぎるようです。

ツリー レベル 8では、世界がサイズ の長方形に分割されます 38.2m x 19.1m。ポリゴンのエッジがこの長方形の中央を通過する場合、(実装によって) この長方形のジオハッシュ表現をポリゴンに割り当てる場合と割り当てない場合があります。

問題を解決するには、ニーズに合わせてツリー レベルを上げる必要があります (マッピングの詳細はこちら)。ただし、インデックスのサイズは大幅に増加します (形状のサイズと複雑さにも依存します)。ツリー レベル 8 で 1000 の地区サイズのポリゴン (数百のポイントを持つものもある) を格納する例として、インデックス サイズは約 600 ~ 700MB です。

geohash が shape を 100% 正確に表現することは決してないため、選択するツリー レベルに関係なく、常に誤検出が発生するリスクがあることに注意してください。これは精度とパフォーマンスのトレードオフであり、geohash はパフォーマンスに優れた選択肢です。

于 2016-08-10T18:44:32.623 に答える