Como você disse que obtém um grupo de polígonos que se cruzam para cada polígono em que está interessado, convém criar o que é chamado de "sobreposição de polígono".
Não é exatamente isso que a solução de Adam está fazendo. Para ver a diferença, dê uma olhada nesta foto de um cruzamento ABC:
Acredito que a solução de Adam criará um polígono "AB" que cubra a área de "AB! C" e "ABC", bem como um polígono "AC" que cubra "AC! B" e "ABC" e um " BC "polígono que é" BC! A "e" ABC ". Portanto, os polígonos de saída "AB", "AC" e "BC" se sobrepõem à área "ABC".
Uma sobreposição de polígono produz polígonos sem sobreposição, portanto AB! C seria um polígono e ABC seria um polígono.
Criar uma sobreposição de polígono no PostGIS é realmente bastante simples.
Existem basicamente três etapas.
O passo 1 é extrair o trabalho de linha [Observe que estou usando o anel externo do polígono, fica um pouco mais complicado se você quiser manipular corretamente os orifícios]:
SELECT ST_ExteriorRing(polygon_col) AS the_geom FROM my_table) AS lines
O passo 2 é "nodo" o trabalho de linha (produza um nó em cada interseção). Algumas bibliotecas como o JTS têm classes "Noder" que você pode usar para fazer isso, mas no PostGIS a função ST_Union faz isso por você:
SELECT ST_Union(the_geom) AS the_geom FROM (...your lines...) AS noded_lines
A etapa 3 é criar todos os possíveis polígonos não sobrepostos que podem vir de todas essas linhas, executados pela função ST_Polygonize :
SELECT ST_Polygonize(the_geom) AS the_geom FROM (...your noded lines...)
Você pode salvar a saída de cada uma dessas etapas em uma tabela temporária ou combiná-las em uma única instrução:
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
)
)
Estou usando ST_Dump porque a saída de ST_Polygonize é uma coleção de geometria e (geralmente) é mais conveniente ter uma tabela em que cada linha é um dos polígonos que compõem a sobreposição de polígonos.