Получение отрезка линии, пересекаемого другим с помощью выражения QGIS

Nov 30 2020

В QGIS 3.16 у меня есть два линейных слоя: строка 1 (синий), строка 2 (красный). Белые точки - это вершины (узлы) двух линий. У них нет общей вершины, они не связаны. Как с помощью выражений QGIS получить отрезок из линии 1, пересекаемый линией 2? Я хочу сгенерировать линию с помощью генератора геометрии выделенного желтого сегмента (см. Снимок экрана).

Я пробовал это как слой символов, созданный геометрией на строке 1: сначала я сегментирую линию 1, чтобы получить сегменты, затем пересекаю ее с линией_2 на другом слое. Я получаю логический вывод (истина / ложь), и я также могу создать точку пересечения, где пересекаются две линии. Однако я тщетно пытался обратиться непосредственно к пересеченному сегменту.

crosses ( 
   segments_to_lines (  
      $geometry),   
   geometry (
      get_feature( 
        'line_2', 
        'fid', 
        1
      )
   )
)

В этом простом случае, я мог бы получить сегмент с выражением (это, как я сгенерировал желтую линию) geometry_n (segments_to_lines ( $geometry), 3). Однако мне нужно установить номер сегмента (в данном случае 3) вручную, но я хочу создать этот номер автоматически, так как у меня много разных случаев, и я не могу сделать это вручную. Как это может быть сделано?

Историю этого вопроса см. В разделе: Случайное перемещение точек на определенном расстоянии в QGIS (Шаг 5)

Ответы

1 Taras Nov 30 2020 at 17:21

Если развертывание выражений QGIS не обязательно, вы можете попробовать следующий рабочий процесс

Шаг 1. Примените "линии разнесения" к слою.'Line 1'

Шаг 2. Используйте геоалгоритм «Геометрия по выражению» , где результат шага 1 пересекает объекты слоя 'Line 2'. Также вы можете использовать базовое «Перекресток» .