PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come convertire i dati dei poligoni in segmenti di linea usando PostGIS

In genere, la conversione del poligono in linea potrebbe non essere semplice perché è nessuna mappatura uno-a-uno e vari elementi della mappa del poligono su diverse linee (anello esterno, anelli interni, ecc.).

Considerando ciò, dovrai dividere ciascuno di questi separatamente seguendo un possibile approccio come questo:

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;

a seconda di quali dati del poligono sono memorizzati in mypolygontable , potresti voler scaricare non solo il confine (come sopra usando ST_Boundary ) ma anche altri elementi. Il codice sopra con una panoramica più dettagliata è tratto dall'elenco postgis-users:Dividi un poligono in N stringhe lineari

Esiste anche un approccio generico al problema spiegato in Esplosione di una stringa o di un poligono in singoli vettori in PostGIS