Exploda MULTILINESTRING em segmentos individuais no PostGIS 1.5

10

Eu tenho um MULTILINESTRINGno PostGIS que consiste em vários LINESTRING's. Considere cada LINESTRINGpara ter um conjunto de POINT's

P 1 , P 2 , ... P N

formando os segmentos de linha

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

onde L X é o segmento de linha que liga P X a P X + 1 .

Usando o PostGIS 1.5, como posso explodir os MULTILINESTRINGsegmentos de linha individuais de cada um LINESTRING?

Chau
fonte

Respostas:

11

Duas opções vêm à mente. Se você quiser um específico LINESTRING, poderá usar ST_NumGeometries () e ST_GeometryN () . Como alternativa, se você deseja todas as sub-geometrias, ST_Dump () é o caminho a seguir.

Depois de realmente ler a pergunta, você precisará fazer algo semelhante a este post da lista postgis-users :

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
fonte
Eu li sua resposta como obter LINESTRINGde MULTILINESTRING. Mas quero ir um nível mais profundo, quero os segmentos de linha individuais que, quando mesclados, formam os LINESTRINGque, novamente, quando mesclados, formam o original MULTILINESTRING. Isso faz sentido?
Chau
1
Ah! Sim, agora eu tinha um café que eu posso ver é o que você escreveu ...
MerseyViking
1
Eu não entendo desde que eu não tomo café;)
Chau
Sua adição funciona muito bem, então muito obrigado!
Chau