Décomposer MULTILINESTRING en segments individuels dans PostGIS 1.5

10

J'ai un MULTILINESTRINGdans PostGIS composé de plusieurs LINESTRING. Considérez chacun LINESTRINGd'avoir un ensemble de POINT« s

P 1 , P 2 , ... P N

former les segments de ligne

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

où L X est le segment de ligne reliant P X à P X + 1 .

À l'aide de PostGIS 1.5, comment puis-je faire exploser les MULTILINESTRINGsegments de ligne individuels de chacun LINESTRING?

Chau
la source

Réponses:

11

Deux options viennent à l'esprit. Si vous voulez un spécifique, LINESTRINGvous pouvez utiliser ST_NumGeometries () et ST_GeometryN () . Alternativement, si vous voulez toutes les sous-géométries, ST_Dump () est le chemin à parcourir.

Après avoir lu la question, vous devrez faire quelque chose de similaire à ce post dans la liste des utilisateurs de 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;
MerseyViking
la source
J'ai lu votre réponse comme comment obtenir LINESTRINGde MULTILINESTRING. Mais je veux aller un peu plus loin, je veux les segments de ligne individuels LINESTRINGqui, une fois fusionnés, forment ceux qui, une fois fusionnés, forment l'original MULTILINESTRING. Cela a-t-il du sens?
Chau
1
Ah! Oui, maintenant j'ai pris un café, je peux voir que c'est ce que vous avez écrit ...
MerseyViking
1
Je ne comprends pas puisque je ne bois pas de café;)
Chau
Votre ajout fonctionne très bien, alors merci beaucoup!
Chau