Разбейте MULTILINESTRING на отдельные сегменты в PostGIS 1.5


10

У меня есть MULTILINESTRINGв PostGIS, состоящий из нескольких LINESTRING. Рассмотрим каждый , LINESTRINGчтобы иметь набор POINT«с

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.