두 개의 포스트그레스 테이블, 하나의 다각형 피처 및 두 번째 포인트 피처가 동일한 투영법을 사용합니다. 내가하고 싶은 것은 공간적 쿼리를 사용하여 아래 그림에서 강조 표시된 것처럼 큰 폴리곤에 포함 된 작은 폴리곤에 포함되지 않은 점만 선택하는 것입니다. 나는 아래의 쿼리를 수행하려고공간 쿼리를 사용하여 포인트 피처 선택
후 작은 다각형 (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
큰 다각형을 나타냄이 다각형을 구별하기 위해 사용된다. 또한 두 폴리곤 오버랩은 작은 폴리곤에 포함 된 포인트가 큰 폴리곤에도 포함된다는 것을 의미합니다.
업데이트
이 쿼리를 실행 한 후 :
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'폴리곤 안에있는 모든 포인트를 선택하고 싶습니다. –