Разрезать линию каждые Х метров - PullRequest
0 голосов
/ 17 апреля 2020

Имея слой из нескольких слоев, представляющий дорогу, я хотел бы разрезать этот слой на линии длиной 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

Спасибо.

...