Ordinare i punti lungo una linea

Dati una serie di punti nello spazio ci si chiede spesso, come ordinarli da sinistra a destra o da sud a nord o in qualsiasi altro modo, per esempio lungo una generica linea?

La risposta sembrerebbe banale, ma non lo è.

Tutti gli algoritmi che si occupano di risolvere questo problema, richiedono sempre un attributo secondo cui ordinare: può essere il tempo, la latitudine o longitudine, la distanza tra i punti più vicini ecc…

In questo blog post tratteremo il caso dell’ordinamento dei punti lungo una generica linea, ovvero, traccerò dei punti a caso e poi li ordinerò secondo una linea, anch’essa tracciata a caso, vedi gif animata:

L’ordinamento è possibile farlo in molti modi, ma qui voglio sottolineare la potenza delle espressioni di QGIS, quindi, proporrò il metodo tramite calcolatore di campi, ecco l’espressione da utilizzare:

with_variable ('nearest',
	overlay_nearest('linea',$geometry)[0],
array_find(
array_sort(
array_foreach(
array_agg($geometry, group_by:=@nearest),
		  line_locate_point(@nearest,@element))), 
          line_locate_point(@nearest,$geometry))+1
)

NOTE FINALI: Il metodo si basa sul calcolo delle distanze dei punti lungo la linea a partire dall’origine della stessa, poi basta ordinare l’array e il gioco è fatto!!!


RIFERIMENTI


I MIEI CANALI – ISCRIVITI


Se il blog post Ti è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!

SE IL POST/BLOG TI È STATO UTILE CONTRIBUISCI A MANTENERLO AGGIORNATO PAYPAL


Pubblicità

2 pensieri su “Ordinare i punti lungo una linea

  1. Ciao, grazie sempre della condivisione. Io l’ho risolta così, prendendo esempio dal tuo blog:

    array_find(array_sort(array_agg ( line_locate_point( overlay_nearest ( ‘linea’, $geometry ) [0], $geometry ) ), false ),line_locate_point( overlay_nearest ( ‘linea’, $geometry ) [0], $geometry ) )

    Un saluto

    Piace a 1 persona

  2. Ciao grazie della condivisione! Ho preso spunto dal tuo blog e l’ho risolta cosi:

    array_find(array_sort(array_agg ( line_locate_point( overlay_nearest ( ‘linea’, $geometry ) [0], $geometry ) ), false ),line_locate_point( overlay_nearest ( ‘linea’, $geometry ) [0], $geometry ) )

    Che pensi?

    Grazie

    Piace a 1 persona

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.