Utilizo la siguiente consulta SQL para crear una tabla que contenga polígonos disociados de una tabla existente:
-- Schema: public
-- Table: t_union
-- Input table: input_table
CREATE TABLE public.t_union AS SELECT
row_number() over() AS gid,
sbqry.geom
FROM
(SELECT
(ST_Dump(ST_Union(geom))).geom::geometry(Polygon, /*SRID*/) AS geom
FROM public.input_table
) AS sbqry;
Características de los polígonos de entrada:
Características de los polígonos de salida:
¿Hay alguna forma de modificar los polígonos de la tabla de entrada en lugar de crear una tabla nueva?
Edición 1:
Mientras tanto, he creado una consulta SQL para modificar la tabla de entrada:
INSERT INTO public.input_table
SELECT
row_number() over() + 100000 AS gid,
sbqry.geom
FROM
(SELECT
(ST_Dump(ST_Union(geom))).geom::geometry(Polygon, /*SRID*/) AS geom
FROM public.input_table
) AS sbqry;
DELETE FROM public.input_table WHERE gid < 100000;
UPDATE public.input_table SET gid = gid - 100000;
row_number() over() + 100000 AS gid
es una torpe solución para ignorar los valores gid existentes y no sé cómo borrar las geometrías de entrada de forma sencilla.
EDITAR 2:
Tal vez esto pueda resolverse utilizando UPDATE
y SET
:
UPDATE public.input_table SET (geom) =
(SELECT COALESCE
((ST_Dump(ST_Union(geom))).geom::geometry(Polygon, /*SRID*/))
FROM public.input_table);
Lamentablemente, se produce un error al ejecutar la consulta:
set-valued function called in context that cannot accept a set
0 votos
¿Cómo se relacionan las características de salida y las de origen: por ID o de algún modo?
1 votos
He subido dos imágenes para ilustrar la pregunta. La numeración de los polyongs no importa mientras los valores sean únicos.
0 votos
¿Cómo se gestionaría la eliminación de algunos polígonos de la tabla original? Estaría haciendo una caída y crear con el mismo esquema con el fin de lograr esto?