관심있는 각 다각형에 대해 교차 다각형 그룹이 있다고 말 했으므로 "다각형 오버레이"라고하는 것을 만들 수 있습니다.
이것은 정확히 Adam의 솔루션이하는 일이 아닙니다. 차이점을 보려면 ABC 교차점의이 그림을보십시오.
Adam의 솔루션이 "AB! C"및 "ABC"영역을 모두 포함하는 "AB"다각형과 "AC! B"및 "ABC"를 포함하는 "AC"다각형 및 " "BC! A"및 "ABC"인 BC "다각형. 따라서 "AB", "AC"및 "BC"출력 다각형은 모두 "ABC"영역과 겹칩니다.
다각형 오버레이는 겹치지 않는 다각형을 생성하므로 AB! C는 하나의 다각형이고 ABC는 하나의 다각형입니다.
PostGIS에서 다각형 오버레이를 만드는 것은 실제로 매우 간단합니다.
기본적으로 세 단계가 있습니다.
1 단계는 선 작업을 추출합니다. [ 다각형 의 외부 링 을 사용하고 있습니다. 구멍을 올바르게 처리하려면 조금 더 복잡해집니다] :
SELECT ST_ExteriorRing(polygon_col) AS the_geom FROM my_table) AS lines
2 단계는 선 작업을 "노드"하는 것입니다 (모든 교차점에서 노드 생성). JTS 와 같은 일부 라이브러리 에는이를 수행하는 데 사용할 수있는 "Noder"클래스가 있지만 PostGIS에서는 ST_Union 함수가이를 수행합니다.
SELECT ST_Union(the_geom) AS the_geom FROM (...your lines...) AS noded_lines
3 단계는 ST_Polygonize 함수 를 사용하여 모든 선에서 나올 수있는 겹치지 않는 다각형을 모두 만드는 것입니다 .
SELECT ST_Polygonize(the_geom) AS the_geom FROM (...your noded lines...)
각 단계의 출력을 임시 테이블에 저장하거나 모두 단일 명령문으로 결합 할 수 있습니다.
CREATE TABLE my_poly_overlay AS
SELECT geom FROM ST_Dump((
SELECT ST_Polygonize(the_geom) AS the_geom FROM (
SELECT ST_Union(the_geom) AS the_geom FROM (
SELECT ST_ExteriorRing(polygon_col) AS the_geom FROM my_table) AS lines
) AS noded_lines
)
)
내가 사용하고 ST_Dump를 각 행은 다각형 오버레이를 구성하는 다각형 중 하나입니다 테이블이 더 편리 ST_Polygonize의 출력이 형상 모음입니다 때문에, 그것은 (보통)입니다.