Vai al contenuto

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: