Vai al contenuto

Selezionare 'n' punti più vicini ad un punto selezionato

Supponiamo di avere un layer di punti e di voler selezionare i primi 10 punti più vicini ad un punto selezionato arbitrariamente. Questo esempio prende spunto da questa domanda posta su StackExchange.

Usando solo le espressioni di QGIS e Select by Expression , l'espressione da usare è:

/*Select the first 'n' points closest to the selected point*/
-- fid selection
with_variable ('selected_fid',
    array_find(
    array_agg(geom_to_wkt($geometry,6)),
    array_agg(geom_to_wkt($geometry,6), filter:=is_selected())[0]),
-- selection circle 
with_variable ('circle', 
    make_circle (
    $geometry,
    aggregate(
    layer:=@layer_name,
    aggregate:='array_agg',
    expression:=
    array_max(array_foreach (
    overlay_nearest (@layer_name, $geometry,limit:=10),
    distance($geometry,@element))))[@selected_fid]),
-- verify
    intersects (@circle,array_agg($geometry)[@selected_fid]))
)

NB: il valore del parametro limit:= in questo caso specifico, dipende dal provider utilizzato:

  1. per shapefile ($id inizia da 0) utilizzare limit:=valore +1
  2. per geopackage ($id inizia da 1) utilizzare limit:=valore


Funzioni e variabili utilizzate: