Como usted dijo que obtiene un grupo de polígonos de intersección para cada polígono que le interesa, puede crear lo que se conoce como "superposición de polígonos".
Esto no es exactamente lo que está haciendo la solución de Adam. Para ver la diferencia, eche un vistazo a esta imagen de una intersección ABC:
Creo que la solución de Adam creará un polígono "AB" que cubre el área de "AB! C" y "ABC", así como un polígono "AC" que cubre "AC! B" y "ABC", y un " BC "polígono que es" BC! A "y" ABC ". Por lo tanto, los polígonos de salida "AB", "AC" y "BC" se superpondrían al á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.
Crear una superposición de polígonos en PostGIS es bastante sencillo.
Básicamente hay tres pasos.
El paso 1 es extraer la línea [Tenga en cuenta que estoy usando el anillo exterior del polígono, se vuelve un poco más complicado si desea manejar correctamente los agujeros]:
SELECT ST_ExteriorRing(polygon_col) AS the_geom FROM my_table) AS lines
El paso 2 es "nodear" la línea de trabajo (producir un nodo en cada intersección). Algunas bibliotecas como JTS tienen clases "Noder" que puede usar para hacer esto, pero en PostGIS la función ST_Union lo hace por usted:
SELECT ST_Union(the_geom) AS the_geom FROM (...your lines...) AS noded_lines
El paso 3 es crear todos los polígonos no superpuestos posibles que pueden provenir de todas esas líneas, realizado por la función ST_Polygonize :
SELECT ST_Polygonize(the_geom) AS the_geom FROM (...your noded lines...)
Puede guardar la salida de cada uno de esos pasos en una tabla temporal, o puede combinarlos en una sola declaración:
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 (generalmente) es más conveniente tener una tabla donde cada fila sea uno de los polígonos que componen la superposición de polígonos.