PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So konvertieren Sie Polygondaten mit PostGIS in Liniensegmente

Im Allgemeinen ist die Konvertierung von Polygonen in Linien möglicherweise nicht einfach, da dies der Fall ist keine Eins-zu-Eins-Zuordnung und verschiedene Elemente des Polygons werden verschiedenen Linienfolgen zugeordnet (äußerer Ring, innere Ringe usw.).

In Anbetracht dessen müssen Sie jede davon separat aufteilen, indem Sie wie folgt vorgehen:

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;

abhängig davon, welche Polygondaten in mypolygontable gespeichert sind , möchten Sie vielleicht nicht nur die Grenze ausgeben (wie oben mit ST_Boundary ), sondern auch andere Elemente. Der obige Code mit genauerer Übersicht stammt aus der Postgis-Benutzerliste:Ein Polygon in N Linienfolgen aufteilen

Es gibt auch einen generischen Ansatz für das Problem, der in Auflösen einer Linienfolge oder eines Polygons in einzelne Vektoren in PostGIS