Имея слой из нескольких слоев, представляющий дорогу, я хотел бы разрезать этот слой на линии длиной 500 м.
Вот краткий обзор моего слоя дороги: https://zupimages.net/viewer.php?id=20 / 16 / eh9e .png
После некоторых исследований inte rnet я приступил к следующему подходу:
Сгруппируйте слой дороги в один блок (Я нашел его непротиворечивым, потому что базовый слой состоит из нескольких строк переменных размеров)
Преобразуйте этот блок в линейную строку для следующего запроса
Создание точек через каждые 500 м вдоль моей линии линий с помощью st_lineinterpolatepoints (невозможно создать точки на моем сгруппированном слое, поскольку эта функция принимает только строку линий)
Вырезать слой, сгруппированный на этом слое точек.
drop table if exists ligne_regroup;
create table ligne_regroup as
select St_linemerge(ST_Union(geom)) as geom
from public.route_echantillon;
drop table if exists final;
create table final as
SELECT ST_LineSubstring(the_geom, 500.00*n/length,
CASE
WHEN 500.00*(n+1) < length
THEN 500.00*(n+1)/ length
ELSE 1
END) AS the_geom
FROM (
SELECT ligne_regroup.geom AS the_geom,
ST_Length(ligne_regroup.geom) AS length
FROM ligne_regroup
) AS t
CROSS JOIN generate_series(0,10000) AS n
WHERE n*500.00/length < 1
К сожалению, я получаю неправильные результаты. некоторые отдаленные линии - это единое целое.
Как видно из следующего примера:
https://zupimages.net/viewer.php?id=20 / 16 / 3sz9.png или https://zupimages.net/viewer.php?id=20 / 16 / ltp6.png или https://zupimages.net/viewer.php?id=20 / 16 / 189d.png
Спасибо.