8 votos

Cómo unirse a todos los polígonos que se cruza y dejar a los demás sin cambio en postgis?

Lo que necesito es unir la intersección de polígonos en una sola geometría y dejar a los demás sin cambiar.

enter image description here

Yo soy capaz de hacer esto mediante la siguiente consulta, que une a todos los polígonos en una sola geometría y los vuelca a los separados.

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

enter image description here

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

7voto

MBCook Puntos 8316

Aquí es un enfoque diferente que me espera va a ser mucho más rápido para el tipo de datos que se mostraron anteriormente:

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

Esta consulta:

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X