Есть ли способ выбрать атрибут из слоя многоугольника и вставить значение в виртуальное поле точечного слоя, используя «в» в калькуляторе полей?
CASE
WHEN within($geometry, geometry_polygon) THEN attribute_polygon
END
qgis
field-calculator
layers
within
Лунное море
источник
источник
Ответы:
Пространственные объединения доступны в полевом калькуляторе после установки плагина refFunctions.
источник
Встроенный калькулятор поля не поддерживает пространственные объединения между слоями объектов. Но, если вы посмотрите на пост Натана в редакторе функций для выражений qgis, вы сможете понять, что мы можем написать сценарий нашего взаимодействия с данными.
Следующий скрипт позволит вам выразить то, что вы после. Он работает путем перебора всех объектов на слое многоугольника и, если есть пространственное соединение, то ссылается на табличные данные из указанного столбца:
Пример слоя многоугольника
Ниже приведен пример слоя многоугольника, который у вас может быть. Я также создал соответствующий точечный слой, который вы увидите на последнем изображении.
Использование выражения
Обратите внимание: если вы хотите использовать отдельный столбец, вы должны изменить второй аргумент, чтобы он соответствовал имени столбца в наборе данных многоугольника. Например, вы можете использовать столбец «AreaNumber», но он должен соответствовать типу столбца в настройках калькулятора поля.
Результат
Вы можете видеть, что значение столбца по умолчанию было применено там, где нет пространственного соединения, а другие сопоставили правильные данные. Обратите внимание, что сценарий, который я дал, будет включен только в первом матче. Вам нужно будет создать какую-то другую бизнес-логику, если ваши полигоны перекрываются.
источник
Это можно сделать в полевом калькуляторе с функцией
aggregate()
. В точечном слое создайте новое поле с выражением калькулятора поля следующим образом:Где
layer
имя слоя многоугольника написано как строка,aggreagate
это агрегатная функция (может использоваться также сумма и т. Д.),expression
Это поле из значений будет взято,concatenator
это соединение символьной строки (должно быть установлено, даже в этом случае) иfilter
основанная на функциях фильтрации по выражению (в этом случае геометрия слоя пересекается с геометрией родительского слоя).Для получения дополнительной информации проверьте документацию Агрегатов QGIS .
Для автоматического обновления могут использоваться виртуальные поля или вы можете установить выражение в качестве значения по умолчанию в настройках формы атрибутов в свойствах слоя ( документация по настройке формы атрибута ).
источник
geometry(@parent)
) поддерживаются только начиная с QGIS 3 и далее. На всякий случай, если кто-то читает это, все еще использует 2.18 ...