PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment convertir des données de polygone en segments de ligne à l'aide de PostGIS

Généralement, la conversion d'un polygone en ligne peut ne pas être simple car il y a pas de mappage un à un et divers éléments de carte de polygone à différentes chaînes de lignes (anneau extérieur, anneaux intérieurs, etc.).

Compte tenu de cela, vous devrez diviser chacun de ceux-ci séparément en suivant une approche possible comme celle-ci :

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;

en fonction des données de polygone stockées dans mypolygontable , vous voudrez peut-être vider non seulement la limite (comme ci-dessus en utilisant ST_Boundary ) mais aussi d'autres éléments. Le code ci-dessus avec un aperçu plus détaillé est tiré de la liste postgis-users :Diviser un polygone en N lignes

Il existe également une approche générique du problème expliquée dans Explosion d'une chaîne de lignes ou d'un polygone en vecteurs individuels dans PostGIS