Используйте калькулятор поля, чтобы проверить пересечение

Dec 03 2020

Конечная цель

Я планирую получать атрибуты из слоев с помощью калькулятора поля там, где они пересекаются с геометрией.

Текущий шаг

Проверка, $geometryпересекается ли ток с интересующим слоем.

Что я пробовал

intersects($geometry,collect_geometries('Layer'))- и вариации map_get. Так как я только что узнал, что intersectsнужно передать известные геометрии, хотя я хочу проверить, есть ли геометрия на слое, я на самом деле в растерянности. Я просто не знаю, как проверить пересечение с помощью калькулятора поля.

Если это невозможно с помощью калькулятора поля, то, может быть, Python?

Ответы

4 Babel Dec 03 2020 at 23:03

Предположим, у вас есть слой с полигонами, который содержит атрибут «имя»: на скриншоте ниже это поле имени имеет значения A, B, C, D, E и F (полигоны помечены).

У нас также есть слой с линиями, и мы хотим получить имена многоугольников, которые пересекает линия. Начиная с QGIS 3.16 (см. Визуальный журнал изменений ; для более старых версий QGIS, возможно, мог бы помочь упомянутый там подключаемый модуль RefFunctions ), появились новые оверлейные выражения. Мы можем использовать один из них, чтобы обозначить линию именами многоугольников, которые она пересекает. Таким же образом выражение можно использовать в калькуляторе полей для создания новых полей (даже виртуальных полей для динамических вычислений):

array_to_string ( 
   overlay_intersects ( 
      'Polygons', 
      name
    ) 
)