O que eu preciso é unir polígonos que se cruzam em uma única geometria e deixar outros sem alterações.
Consigo fazer isso usando a seguinte consulta, que une todos os polígonos em uma única geometria e os despeja nos separados.
INSERT INTO unioned(geom)
SELECT ST_MULTI((ST_Dump(ST_Union(geom))).geom) from footprints;
O problema é que eu tenho mais de um milhão de linhas em um banco de dados e a ST_Union
operação nunca termina. Existe alguma maneira de conseguir o mesmo sem unir todas as geometrias?
ST_ClusterIntersecting
retorna geometria com SRID = 0? Como isso poderia ser resolvido? Tentando executar a seguinte consulta:INSERT INTO fixed_footprints(geom) SELECT ST_UnaryUnion(unnest(ST_ClusterIntersecting(geom))) as geom FROM footprints;
Eu recebi o seguinte erro:[22023] ERROR: Geometry SRID (0) does not match column SRID (4326)
INSERT INTO fixed_footprints(geom) SELECT ST_Multi(st_setsrid(ST_UnaryUnion(unnest(ST_ClusterIntersecting(geom))), 4326)) as geom FROM footprints;
vai tentar fazer isso em um conjunto maiorST_ClusterIntersecting
. Obrigado por apontar, eu vou consertá-lo.