Explodieren Sie MULTILINESTRING in PostGIS 1.5 in einzelne Segmente


10

Ich habe ein MULTILINESTRINGPostGIS, das aus mehreren besteht LINESTRING. Betrachten Sie jede LINESTRINGeinen Satz haben POINT‚s

P 1 , P 2 , ... P N.

Bilden der Liniensegmente

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

wobei L X das Liniensegment ist, das P X mit P X + 1 verbindet .

Wie kann ich mit PostGIS 1.5 die MULTILINESTRINGeinzelnen Liniensegmente auflösen LINESTRING?

Antworten:


11

Zwei Optionen kommen in den Sinn. Wenn Sie eine bestimmte möchten LINESTRING, können Sie ST_NumGeometries () und ST_GeometryN () verwenden . Wenn Sie alternativ alle Untergeometrien möchten, ist ST_Dump () der richtige Weg.

Nachdem Sie die Frage tatsächlich gelesen haben, müssen Sie etwas Ähnliches wie diesen Beitrag aus der Liste der Postgis-Benutzer tun :

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;

Ich habe deine Antwort gelesen, wie man LINESTRINGvon einem kommt MULTILINESTRING. Aber ich möchte eine Ebene tiefer gehen, ich möchte die einzelnen Liniensegmente, die beim Zusammenführen die bilden, die beim Zusammenführen LINESTRINGwieder das Original bilden MULTILINESTRING. Ist das sinnvoll?
Chau

1
Ah! Ja, jetzt habe ich einen Kaffee
getrunken.

1
Ich verstehe nicht, da ich keinen Kaffee trinke;)
Chau

Ihr Zusatz funktioniert aber gut, also vielen Dank!
Chau
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.