Експлуатуйте МНОГОЛІНІСТРИНГ на окремі сегменти в PostGIS 1.5


10

У мене є MULTILINESTRINGPostGIS, що складається з декількох LINESTRING. Розглянемо, що кожен LINESTRINGмає набір POINTs

P 1 , P 2 , ... P N

формування відрізків лінії

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

де L X - відрізок лінії, що з'єднує P X з P X + 1 .

Використовуючи PostGIS 1.5, як я можу підірвати MULTILINESTRINGокремі сегменти рядка кожного LINESTRING?

Відповіді:


11

На думку приходять два варіанти. Якщо ви хочете певного, LINESTRINGтоді ви можете використовувати ST_NumGeometries () і ST_GeometryN () . Крім того, якщо ви хочете, щоб усі субгеометрії були ST_Dump () .

Насправді прочитавши питання, вам потрібно буде зробити щось подібне до цієї публікації зі списку користувачів 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;

Я читаю вашу відповідь як отримати LINESTRINGз а MULTILINESTRING. Але я хочу піти на рівень глибше, я хочу, щоб окремі відрізки рядків, які при злитті утворюють ті LINESTRING, що знову, при злитті утворюють оригінал MULTILINESTRING. Чи має це сенс?
Чау

1
Ах! Так, зараз я випив каву, бачу, ось що ви написали ...
MerseyViking

1
Я не розумію, оскільки не п'ю кави;)
Чау

Хоча ваше додаток працює чудово, тож велике спасибі!
Чау
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.