sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo convertir datos de polígonos en segmentos de línea usando PostGIS

En general, la conversión de polígono a línea puede no ser sencilla porque hay sin mapeo uno a uno y varios elementos del mapa de polígonos a diferentes cadenas lineales (anillo exterior, anillos interiores, etc.).

Teniendo en cuenta eso, deberá dividir cada uno de ellos por separado siguiendo un enfoque posible como este:

SELECT ST_AsText( ST_MakeLine(sp,ep) )
FROM
   -- extract the endpoints for every 2-point line segment for each linestring
   (SELECT
      ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) as sp,
      ST_PointN(geom, generate_series(2, ST_NPoints(geom)  )) as ep
    FROM
       -- extract the individual linestrings
      (SELECT (ST_Dump(ST_Boundary(geom))).geom
       FROM mypolygontable
       ) AS linestrings
    ) AS segments;

dependiendo de qué datos de polígono se almacenan en mypolygontable , es posible que desee volcar no solo el límite (como arriba usando ST_Boundary ) sino también otros elementos. El código anterior con una descripción más detallada se tomó de la lista de usuarios de postgis:Dividir un polígono en N cadenas lineales

También hay un enfoque genérico del problema explicado en Explosión de una cadena lineal o polígono en vectores individuales en PostGIS