Como has dicho que obtienes un grupo de polígonos de intersección para cada polígono que te interesa, es posible que quieras crear lo que se conoce como "superposición de polígonos".
Esto no es exactamente lo que hace la solución de Adam. Para ver la diferencia, eche un vistazo a esta imagen de una intersección ABC:
![ABC intersection]()
Creo que la solución de Adam creará un polígono "AB" que cubre tanto el área de "AB!C" como de "ABC", así como un polígono "AC" que cubre "AC!B" y "ABC", y un polígono "BC" que es "BC!A" y "ABC". Así, los polígonos de salida "AB", "AC" y "BC" se solaparían con el área "ABC".
Una superposición de polígonos produce polígonos no superpuestos, por lo que AB!C sería un polígono y ABC sería un polígono.
La creación de una superposición de polígonos en PostGIS es en realidad bastante sencilla.
Hay básicamente tres pasos.
El paso 1 es extraer el trabajo de línea [Tenga en cuenta que estoy usando el anillo exterior del polígono, se complica un poco más si se quiere manejar correctamente los agujeros]:
SELECT ST_ExteriorRing(polygon_col) AS the_geom FROM my_table) AS lines
El segundo paso consiste en "nodificar" las líneas (producir un nodo en cada intersección). Algunas bibliotecas como STC tienen clases "Noder" que puedes usar para hacer esto, pero en PostGIS el ST_Union lo hace por ti:
SELECT ST_Union(the_geom) AS the_geom FROM (...your lines...) AS noded_lines
El tercer paso consiste en crear todos los posibles polígonos no superpuestos que puedan surgir de todas esas líneas, lo que se hace con el ST_Polygonize función:
SELECT ST_Polygonize(the_geom) AS the_geom FROM (...your noded lines...)
Puedes guardar la salida de cada uno de esos pasos en una tabla temporal, o puedes combinarlos todos en una sola sentencia:
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
)
)
Estoy usando ST_Dump porque la salida de ST_Polygonize es una colección de geometría, y es (normalmente) más conveniente tener una tabla donde cada fila es uno de los polígonos que componen la superposición de polígonos.