Geometria più vicina con filtro condizionato↵
Due layer di punti: layer1
con attributo id1
e layer2
con id2
.
A partire dal layer1
, ottenere per ogni punto del layer1
tutti i punti del layer2
dove id2
ha un valore diverso da id1
(collegarli con un segmento).
Esempio:
Come si evince dallo screenshot, i punti in rosso devono collegarsi con i punti blu che hanno id
differente. Il punto 6 è rimasto isolato perché non ci sono punti vicini e con id diverso da 6.
Espressione utilizzata (>=QGIS 3.16):
collect_geometries(
make_line(
$geometry,
geometry(get_feature('layer2','id2',
attribute(
array_filter(
overlay_nearest('layer2',$currentfeature,limit:=-1),
attribute( @element, 'id2' ) != "id1" )[0], 'id2' ))))
)
Altra espressione più performante su grandi dataset (>=QGIS 3.22.1)
make_line (
eval( 'overlay_nearest(
\'layer2\',
$geometry,
filter:=id2<>'||"id1"||')')[0],
$geometry
)
idea presa da qui:
prova tu↵
Funzioni e variabili utilizzate: