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?

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;

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.