私は2つのポストグルテーブル、1つのポリゴンフィーチャ、2つ目のポイントフィーチャを持ち、同じ投影を持ちます。 私がしたいのは、大きなポリゴンに含まれ、小さなポリゴンに含まれていないポイントだけを選択することです(下の図で強調表示されているように、空間クエリを使用します)。私は以下のクエリをどうしようとしています空間クエリを使用したポイントフィーチャの選択
は、その後、小さなポリゴンに(kind=1
)を含有する/交差していないselect
すべての点が含まれている中で選択した機能から、これらの点を返すことです大きいポリゴン(kind=2
)。 クエリの結果は0 rows
になります。上記のクエリで
select
*
from
(
select p.geom as point_geom,sp.geom as polygon_geom
from polygons sp, points p
where st_disjoint(sp.polygon_geom,p.point_geom) and sp.kind = 1
) as subquery
where st_contains(subquery.scale_geom,subquery.pois_geom) and subquery.kind = 2;
kind
カラムをkind = 1
が小さいポリゴンとkind = 2
大きいポリゴンを表し、これらの多角形、区別するために使用されます。また、両方のポリゴンオーバーラップは、小さなポリゴンに含まれるポイントに大きなポリゴンも含まれていることを意味します。
更新
このクエリを実行した後:囲まれたポイントは唯一の種類1にする必要があります
:一部の結果は次のように許容なかった
SELECT DISTINCT p.geom as point_geom FROM points p JOIN polygons poly1 ON ST_Disjoint(p.geom, poly1.geom) JOIN polygons poly2 ON ST_Intersects(p.geom, poly2.geom) WHERE poly1.kind = 1 AND poly2.kind = 2 ;
しかしそれらは選択されます。
サブクエリは、「kind = 1」のポリゴンのみを返します。そして外側のクエリで、あなたは 'kind = 2'を求めます。結果は自然に空です。 – dhke
もっと詳しく説明できますか?あなたは最初にすべての大きな( 'kind = 2')ポリゴンの中に小さい(' kind = 1')ポリゴンを選択する必要がありますか、それとももっとリラックスした条件ですか、つまり少なくとも1つの 'kind = 2'任意の 'kind = 1'ポリゴンの内部にはありませんか? – dhke
@dhkeはい「kind = 2」ポリゴンの中で少なくとも1つのポイントを選択したいのですが、「kind = 1」のポリゴンの中にはありません –