Explote MULTILINESTRING en segmentos individuales en PostGIS 1.5

10

Tengo un MULTILINESTRINGPostGIS que consta de varios LINESTRING's. Considere que cada uno LINESTRINGtiene un conjunto de POINT's

P 1 , P 2 , ... P N

formando los segmentos de línea

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

donde L X es el segmento de línea que conecta P X a P X + 1 .

Usando PostGIS 1.5, ¿cómo puedo explotar MULTILINESTRINGen segmentos de línea individuales de cada uno LINESTRING?

Chau
fuente

Respuestas:

11

Se me ocurren dos opciones. Si desea un específico LINESTRING, puede usar ST_NumGeometries () y ST_GeometryN () . Alternativamente, si desea todas las subgeometrías , ST_Dump () es el camino a seguir.

Después de leer la pregunta, deberá hacer algo similar a esta publicación desde la lista de usuarios 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
fuente
Leí tu respuesta sobre cómo obtenerla LINESTRINGde a MULTILINESTRING. Pero quiero ir un nivel más profundo, quiero los segmentos de línea individuales, que cuando se fusionan forman el LINESTRING's que nuevamente, cuando se fusionan, forman el original MULTILINESTRING. ¿Tiene sentido?
Chau
1
Ah! Sí, ahora he tomado un café, puedo ver que eso es lo que escribiste ...
MerseyViking
1
No entiendo porque no tomo café;)
Chau
Sin embargo, su adición funciona bien, así que muchas gracias.
Chau