我有兩個postgres表,一個多邊形要素和第二個點要素,具有相同的投影。 我想要做的是僅使用空間查詢選擇僅包含在大多邊形中且不包含在小多邊形中的點,如下圖中突出顯示的那樣。使用空間查詢選擇點要素
我想用下面的查詢做的是,select
所有這些不相交/包含在小多邊形(kind=1
),然後點從包含在所選擇的功能,返回這些點大的多邊形(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
大多邊形之間進行區分。同樣兩個多邊形重疊,這意味着包含在小多邊形中的點也包含在大的多邊形中。
更新
運行此查詢後:
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 ;
一些結果是不能接受的,如:
被包圍的點應該只有實物1但他們被選中。
你的子查詢只返回'kind = 1'的那些多邊形。然後在外部查詢中,您要求'kind = 2'。結果自然是空的。 – dhke
你能詳細闡述一下嗎?你首先需要在每個大的('kind = 2')多邊形內選擇小的('kind = 1')多邊形,還是讓條件更加寬鬆,也就是說你希望每個點至少有一個'kind = 2'多邊形,但不在'kind = 1'多邊形內? – dhke
@dhke是我想選擇至少在'kind = 2'多邊形內但不在'kind = 1'多邊形內的每個點 –