PostGIS:ST_Intersection = 100%のジオメトリの場合、ST_Equals false?
地籍の小包データで構成される2つのデータセットがあり、それぞれ約125,000行です。ジオメトリ列は、区画の境界を表すWKBポリゴンです。すべてのデータは幾何学的に有効です(ポリゴンが閉じているなど)。 いくつかの最近のデータは、比較ジョブに使用されているベースデータとは異なる投影法で到着しました。そのため、新しいデータを再投影しました(ベースは4326でした。もう1つは、900914としてPostGISに取り込まれたWGA94でした... 4326に再投影しました)。 。 分析の最初の段階は、一致しない区画を見つけて保存することでした。その一部は、同一のジオメトリを持つ区画を識別して保存することです。 だから私は非常に標準的なクエリを実行しました(以下のコードブロックはスキーマの詳細などを抽象化しています): create table matchdata as select a.* from gg2014 a, gg2013 b where ST_Equals(a.g1,b.g1) 結果はゼロです。 「おかしい…」と思った。「おそらく、再投影によって引き起こされた小さな頂点シフトがありました。それは煩わしいことであり、実際には起こらないはずです。」 幸いにも、空間的に同一である必要がある区画を確立できるようにする豊富な空間データ(5つの識別子列)があります。2014年のテーブルの変更日が2013年のデータの最大変更日より前である同じ識別子を持つものです。これは、120,086の個別の行になります。 識別子とジオメトリを別のテーブル(match_id)に保存し、次のクエリを実行しました。 select apid, bpid, ST_Area(ag::geometry) as aa, ST_Area(bg::geometry) as ab, ST_Area(ST_Intersection(ag,bg)::geometry)/ST_Area(ag::geometry) as inta, ST_Area(ST_Intersection(ag,bg)::geometry)/ST_Area(ag::geometry) as intb from match_id order by inta 最初の16の値についてintaとintb同様にゼロであった、次の456であった0.99999999っぽい(最小0.99999999999994、最大0.999999999999999)、以降1た473行-交差の面積があった行120050まで、より大きいいずれかの幾何学的形状(最大値intaとはintb)まだ1.00000000000029だったが、。 だからここに私の難問があります:2つのジオメトリがそれぞれの領域の99.999999999994%から100.000000000029%の間で空間的に交差する場合、「ST_Equals」に「そうです...それを与えます。十分に近い」と言ってもらいたいのです。 結局のところ、これは16兆分の1の割合で減少していることに相当します。 地球の周囲(約40,000 km)のコンテキストでは、0.0000000025 kmの頂上から離れているようなものです(面積の差が小さくなるため、頂点のシフトはさらに小さくする必要があります)。 TFD(私がR'dを持っています)によると、許容値ST_Intersects()は概念的に0.00001m(1mm)であるため、頂点の暗黙の変更(私が確認していないことを告白します:ST_Dump()それらを変更するので)は小さくなるようです。公差より。(私はそれを理解していますがST_Intersects …