Saltar al contenido

PostGIS: convierte varios polígonos en un solo polígono

Necesitamos tu ayuda para compartir nuestros tutoriales referente a las ciencias informáticas.

Solución:

Usé ST_DUMP para convertir una tabla de geometrías de varios polígonos en PostgreSQL en una nueva tabla con geometrías de polígonos y otras columnas de datos.

CREATE TABLE poly AS                       --poly will be the new polygon table
WITH dump AS (
    SELECT id, test,                       --columns from your multipolygon table 
      (ST_DUMP(geometry)).geom AS geometry 
    FROM multi                             --the name of your multipolygon table
) 
SELECT id, test, 
  geometry::geometry(Polygon,4326)         --type cast using SRID from multipolygon
FROM dump;

Actualizar: Creo que esto podría lograrse mucho más fácil con esta consulta.

CREATE TABLE polygon_table AS 
    SELECT id, example_column, (ST_DUMP(geom)).geom::geometry(Polygon,4326) AS geom FROM multipolygon_table

Puede usar ST_GeometryN junto con ST_NumGeometries y la función generate_series para obtener lo que necesita.

Supongamos que tiene la tabla del ejemplo de Jakub:

CREATE TABLE multi AS(
SELECT 1 as id, 2 as test, ST_GeomFromText('MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0)),((1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))') AS geom
);

Este contiene un multipolígono, un id y otra columna.

Para obtener cada polígono individual de la tabla, incluidos todos los demás attributes prueba algo como:

SELECT id, test, ST_GeometryN(geom, generate_series(1, ST_NumGeometries(geom))) AS geom 
FROM multi

“id” y “prueba” son los valores para cada fila en la tabla original. generar_series crea una serie de números desde 1 hasta el número de geometrías en cada fila.

Por lo tanto, dividirá cada geometría múltiple en sus partes separadas de geometría única y los valores en las otras columnas seguirán siendo los mismos.

Simplemente reemplace las columnas y la tabla en el ejemplo con las columnas de su archivo de forma exportado y obtendrá la tabla con los polígonos individuales.

Espero que esto responda a su pregunta.

Importe a una tabla de preparación y luego use ST_DUMP para dividir el multigeom en piezas individuales y utilícelo para completar la tabla de destino.

ACTUALIZAR

Importa todos los datos que necesita en una tabla de etapas (llamémosla multi) y luego usar ST_DUMP para dividir la multigeometría en geometrías individuales:

WITH multi AS(
SELECT 1 as id, 2 as test, ST_GeomFromText('MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0)),((1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))') as poli
)
,dump AS(
SELECT  id
    ,test
    ,ST_DUMP(poli) as d
FROM    multi)
SELECT  id
    ,test
    ,(dump.d).path
    ,ST_AsTEXT((dump.d).geom)
FROM dump 

Recuerda algo, que tienes la capacidad de explicar si diste con el arreglo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *