Esplodi MULTILINESTRING in singoli segmenti in PostGIS 1.5


10

Ho un MULTILINESTRINGPostGIS composto da diversi LINESTRING. Considerare ogni LINESTRINGavere una serie di POINTs'

P 1 , P 2 , ... P N

formando i segmenti di linea

L 1 , L 2 , ... L N-1

dove L X è il segmento di linea che collega P X a P X + 1 .

Utilizzando PostGIS 1.5 come posso esplodere MULTILINESTRINGin segmenti di linea individuali di ciascuno LINESTRING?

Risposte:


11

Mi vengono in mente due opzioni. Se si desidera una specifica LINESTRINGquindi è possibile utilizzare ST_NumGeometries () e ST_GeometryN () . In alternativa, se si desidera tutte le geometrie secondarie, ST_Dump () è la strada da percorrere.

Dopo aver effettivamente letto la domanda, dovrai fare qualcosa di simile a questo post dall'elenco degli utenti postgis :

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
   -- eliminate 0 length linestring 
    where st_x(st_startpoint(geom))<> st_x(st_endpoint(geom))
   ) AS linestrings
) AS segments;

Ho letto la tua risposta come ottenere LINESTRINGda a MULTILINESTRING. Ma voglio approfondire il livello, voglio i singoli segmenti di linea, che quando uniti formano quelli LINESTRINGche di nuovo, quando uniti, formano l'originale MULTILINESTRING. Ha senso?
Chau,

1
Ah! Sì, ora ho preso un caffè, vedo che è quello che hai scritto ...
MerseyViking

1
Non capisco da quando non bevo caffè;)
Chau

La tua aggiunta funziona benissimo, quindi grazie mille!
Chau,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.