나는 며칠 동안 문제로 어려움을 겪고 있으며 PostGIS (v2.5)의 주제가 교차 할 때 많은 사람들이 붙어 있다는 것을 깨달았습니다. 그래서 더 상세하고 일반적인 질문을하기로 결정했습니다.
다음 테이블이 있습니다.
DROP TABLE IF EXISTS tbl_foo;
CREATE TABLE tbl_foo (
id bigint NOT NULL,
geom public.geometry(MultiPolygon, 4326),
att_category character varying(15),
att_value integer
);
INSERT INTO tbl_foo (id, geom, att_category, att_value) VALUES
(1, ST_SetSRID('MULTIPOLYGON (((0 6, 0 12, 8 9, 0 6)))'::geometry,4326) , 'cat1', 2 );
INSERT INTO tbl_foo (id, geom, att_category, att_value) VALUES
(2, ST_SetSRID('MULTIPOLYGON (((5 0, 5 12, 9 12, 9 0, 5 0)))'::geometry,4326), 'cat1', 1 );
INSERT INTO tbl_foo (id, geom, att_category, att_value) VALUES
(3, ST_SetSRID('MULTIPOLYGON (((4 4, 3 8, 4 12, 7 14,10 12, 11 8, 10 4, 4 4)))'::geometry,4326) , 'cat2', 5 );
다음과 같이 보입니다 :
부모 다각형의 교차점을 기준으로 모든 자식 다각형을 가져오고 싶습니다. 결과적으로 다음과 같이 예상됩니다.
- 하위 다각형은 서로 겹치지 않습니다.
- 부모 폴리곤 값의 합계를 포함하는 열
- 한 범주의 부모 다각형 수를 포함하는 열
- 다른 범주의 개수를 포함하는 열
- 다음 규칙에 따라 자식 다각형의 범주를 포함하는 열입니다.-모든 부모 다각형이 하나의 클래스에서 온 경우 자식 다각형에도이 클래스가 있습니다. 그렇지 않으면 자식 다각형의 범주는 세 번째 범주입니다.
따라서 다음과 같이 보입니다.
따라서, 단부 (이 예) 생성 된 출력 테이블의 열을 포함하는 7 행 (모두 7 겹치지 자식 다각형) 것 category
, sum_value
, ct_overlap_cat1
,ct_overlap_cat2
내가 시작한 다음 코드는 한 부모를 다른 부모와 비교하여 개별 교차점을 제공합니다.
SELECT
(ST_Dump(
ST_SymDifference(a.geom, b.geom)
)).geom
FROM tbl_foo a, tbl_foo b
WHERE a.ID < b.ID AND ST_INTERSECTS(a.geom, b.geom)
UNION ALL
SELECT
ST_Intersection(a.geom, b.geom) as geom
FROM tbl_foo a, tbl_foo b
WHERE a.ID < b.ID AND ST_INTERSECTS(a.geom, b.geom);
중복 된 다각형의 수에 관계없이 항상 '가장 작은'(자식) 다각형을 얻는다는 언급 된 코드의 결과를 재귀 적으로 반복하는 방법은 무엇입니까 (그림 2)?