PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como converter dados de polígonos em segmentos de linha usando PostGIS


Geralmente, converter polígono em linha pode não ser simples porque há sem mapeamento um para um e vários elementos do mapa de polígonos para diferentes cadeias de linhas (anel externo, anéis internos, etc.).

Considerando isso, você precisará dividir cada um deles separadamente seguindo uma abordagem possível como esta:
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;

dependendo de quais dados de polígonos são armazenados em mypolygontable , você pode querer despejar não apenas o limite (como acima usando ST_Boundary ), mas também outros elementos. O código acima com uma visão mais detalhada foi retirado da lista postgis-users:Dividir um polígono em N cadeias de linhas

Há também uma abordagem genérica para o problema explicado em Explodindo uma cadeia de linhas ou polígono em vetores individuais no PostGIS