Rozbij MULTILINESTRING na poszczególne segmenty w PostGIS 1.5


10

Mam MULTILINESTRINGw PostGIS składający się z kilku LINESTRING. Rozważmy każdy LINESTRINGmieć zestaw POINT„s

P 1 , P 2 , ... P N

tworząc odcinki linii

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

gdzie L X to odcinek linii łączący P X z P X + 1 .

Używając PostGIS 1.5, jak mogę rozbić MULTILINESTRINGposzczególne segmenty linii każdego z nich LINESTRING?

Odpowiedzi:


11

Przychodzą mi na myśl dwie opcje. Jeśli chcesz konkretnego LINESTRING, możesz użyć ST_NumGeometries () i ST_GeometryN () . Alternatywnie, jeśli chcesz mieć wszystkie pod-geometrie, ST_Dump () jest właściwą drogą.

Po przeczytaniu pytania musisz zrobić coś podobnego do tego postu z listy użytkowników 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;

Przeczytałem twoją odpowiedź jak dostać się LINESTRINGod MULTILINESTRING. Ale chcę zejść o poziom głębiej, chcę poszczególne segmenty linii, które po scaleniu tworzą te LINESTRING, które po scaleniu tworzą oryginał MULTILINESTRING. Czy to ma sens?
Chau

1
Ach! Tak, teraz
wypiłem

1
Nie rozumiem, ponieważ nie piję kawy;)
Chau,

Twój dodatek działa dobrze, więc bardzo dziękuję!
Chau
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.