¿Cómo unir todos los polígonos que se cruzan y dejar otros sin cambios en postgis?

Pregunta:

Lo que necesito es unir polígonos que se cruzan en una sola geometría y dejar otros sin cambios.

ingrese la descripción de la imagen aquí

Puedo hacer esto usando la siguiente consulta, que une todos los polígonos en una sola geometría y luego la vuelca a los separados.

INSERT INTO unioned(geom)
SELECT ST_MULTI((ST_Dump(ST_Union(geom))).geom) from footprints;

ingrese la descripción de la imagen aquí

El problema es que tengo más de un millón de filas en una base de datos y la operación ST_Union nunca termina. ¿Hay alguna forma de lograr lo mismo sin unir todas las geometrías?

Respuesta:

Aquí hay un enfoque diferente que espero sea mucho más rápido para el tipo de datos que mostró anteriormente:

ST_UnaryUnion(unnest(ST_ClusterIntersecting(geom))) FROM footprints;

Esta consulta:

  1. Utiliza ST_ClusterIntersecting para ST_ClusterIntersecting grupos de huellas de edificios que forman una "cadena de intersección" y pega cada grupo en una GeometryCollection . Devuelve una matriz.
  2. Utiliza unnest para la matriz de colecciones de geometrías en una fila para cada colección de geometrías.
  3. Utiliza ST_UnaryUnion para ST_UnaryUnion los elementos dentro de cada colección de geometría.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım