🇮🇹 Italiano | 🇬🇧 English

GeoSort — Guida completa

Ordina le feature di un layer vettoriale QGIS per criteri geometrici e attributivi — 18 criteri, ordinamento multi-criterio, esempi e casi d'uso.

Versione 1.11.1 QGIS 3.16+ | 4.x Licenza GPLv2

Introduzione

GeoSort è un plugin QGIS che ordina le feature di un layer vettoriale (punti, linee o poligoni) secondo un criterio geometrico o attributivo a scelta, e scrive un campo progressivo (default sort_order: 1 = prima feature nell'ordine scelto) sul layer o su una copia in memoria. È disponibile sia come dialogo interattivo (menu Vettore → GeoSort) sia come algoritmo nel Processing Toolbox, utilizzabile in batch, nel modellatore grafico e via PyQGIS headless.

Dialogo GeoSort con i criteri di ordinamento disponibili
Il dialogo di GeoSort: layer di input, criterio di ordinamento, opzioni e output in un'unica finestra non modale.

Questa guida spiega ogni criterio disponibile, i relativi parametri (nel dialogo e nel Processing), quando conviene usarlo e un caso d'uso tipico con uno screenshot prima/dopo. Per la sintesi in forma di tabella vedi anche il README del progetto.

Installazione

  1. Scarica il file .zip del plugin dalla pagina delle release.
  2. In QGIS: Plugin → Gestisci e Installa Plugin → Installa da ZIP.
  3. Seleziona il file geosort.zip.
  4. Il plugin compare nel menu Vettore → GeoSort e nel Processing Toolbox sotto GeoSort.
Nessuna dipendenza esterna: GeoSort usa solo API PyQGIS e libreria standard Python. Funziona sia su QGIS 3.16+ (Qt5) sia su QGIS 4.x (Qt6) con lo stesso file .zip.

Concetti base

  • Campo progressivo — GeoSort scrive un campo intero (default sort_order, nome/valore iniziale/passo personalizzabili — vedi Numerazione) con la posizione di ogni feature nell'ordine scelto: 1 = prima feature.
  • Direzione — Ascendente o Discendente, si applica a qualunque criterio.
  • Valori NULL — per criteri attributo/espressione, scegli se le feature con valore NULL vanno in cima o in fondo all'ordine.
  • Geometrie NULL o incompatibili — feature senza geometria, o con un tipo non compatibile col criterio scelto (es. punti con criterio "area"), non interrompono l'ordinamento: vengono relegate in fondo.
  • Anteprima — il bottone Anteprima… apre un popup con le prime feature ordinate (FID, valore sort_order, valore del criterio) per verificare il risultato prima di applicare le modifiche.

Attributo / Espressione

Attributo tabellare tutti i tipi

Ordina per il valore di un qualunque campo del layer (testo, intero, reale, data).

Dialogo: radio "Per attributo / espressione" + combo campo  â€¢  Processing: CRITERION=0, ATTRIBUTE_FIELD

Quando usarlo: è il criterio più diretto — nome via, codice catastale, categoria, data di rilievo, qualunque colonna già presente nella tabella attributi.

Espressione QGIS tutti i tipi

Ordina per il risultato di un'espressione QGIS arbitraria, la stessa sintassi del Field Calculator. Clicca il pulsante ε per aprire l'editor di espressioni; l'espressione attiva viene evidenziata in verde, con un bottone Rimuovi per tornare al campo singolo.

Dialogo: radio "Per attributo / espressione" + editor espressione  â€¢  Processing: CRITERION=16, EXPRESSION

  • Combinazione di campi: "area_kmq" / "pop"
  • Funzioni geometriche: length($geometry), area($geometry)
  • Condizioni: CASE WHEN "tipo"='A' THEN 1 ELSE 2 END
  • Concatenazione per chiavi composte: "fid" || "id_poly"

Quando usarlo: quando il criterio non è un singolo campo ma una combinazione, un calcolo geometrico al volo, o una classificazione condizionale.

Modalità di ordinamento testuale

Per entrambi i criteri sopra, un valore testuale può essere confrontato in due modi:

ModalitàComportamentoEsempio
Lessicografico (default)confronto carattere per carattere"1010" < "11" < "1111"
Natural Sortle sequenze di cifre incorporate sono confrontate come numeri interi"11" < "1010" < "1111"

Utile con campi alfanumerici come FILE1, FILE2, FILE10 — con l'ordine lessicografico FILE10 finirebbe prima di FILE2.

Ordinamento lessicografico di codici FILE1, FILE2, FILE10
Lessicografico: FILE1 → FILE10 → FILE2
Natural Sort di codici FILE1, FILE2, FILE10
Natural Sort: FILE1 → FILE2 → FILE10
Caso d'uso: un layer di tavole cartografiche con nomi FOGLIO_1…FOGLIO_120: senza Natural Sort, FOGLIO_100 comparirebbe subito dopo FOGLIO_1.

Coordinate centroide

Centroide — coordinata X / Y tutti i tipi

Ordina per la posizione geografica del centroide della geometria, lungo l'asse X (ovest→est) o Y (sud→nord).

Processing: CRITERION=1 (X) / CRITERION=2 (Y)

Quando usarlo: numerazione progressiva "da sinistra a destra" o "dal basso verso l'alto" — pali, pozzetti, alberi lungo un asse dominante.

Centroide — distanza da punto di riferimento tutti i tipi

Ordina per distanza euclidea (o geodetica, vedi Misura geodetica) del centroide da un punto di riferimento configurabile. Nel dialogo il punto si imposta con le caselle X/Y oppure cliccando Seleziona punto sulla mappa — il dialogo si abbassa (senza chiudersi) e il primo click sulla mappa cattura le coordinate; Esc annulla la selezione.

Dialogo: spin box X/Y + picker sulla mappa  â€¢  Processing: CRITERION=3, REF_POINT (opzionale, formato "x,y [EPSG:xxxx]"; vuoto = origine 0,0)

Caso d'uso: ordinare gli interventi di manutenzione per distanza crescente da una centrale operativa, o le stazioni di una rete radiale per distanza dal nodo centrale.
Punti ordinati per distanza crescente da un punto di riferimento
Ordinamento radiale: distanza crescente da un punto di riferimento scelto sulla mappa.

Proprietà geometrica

Area / Perimetro poligoni

Ordina i poligoni per superficie o lunghezza del perimetro.

Processing: CRITERION=4 (area) / CRITERION=5 (perimetro)

Caso d'uso: particelle catastali o comparti urbanistici ordinati per area decrescente per dare priorità alle unità più grandi in un report.

Lunghezza linee

Ordina le linee per lunghezza totale.

Processing: CRITERION=6

Caso d'uso: tronchi stradali o canali ordinati dal più corto al più lungo prima di un'elaborazione batch di semplificazione geometrica.

Numero di vertici tutti i tipi

Ordina per conteggio dei vertici della geometria.

Processing: CRITERION=7

Caso d'uso: individuare rapidamente le geometrie più complesse (candidate a una semplificazione) ordinandole per numero di vertici decrescente.

Bounding Box — larghezza / altezza / area / Xmin / Ymin tutti i tipi

Cinque varianti sulle dimensioni e la posizione del rettangolo di inviluppo (bounding box) della geometria: larghezza, altezza, area, coordinata minima X, coordinata minima Y.

Processing: CRITERION=8 (larghezza), 9 (altezza), 10 (area), 11 (Xmin), 12 (Ymin)

Caso d'uso: ordinare riquadri di ritaglio o tessere di una griglia per Xmin/Ymin quando serve un ordine di scansione semplice riga per riga (per un ordine "a serpentina" più naturale vedi invece Serpentina).
Poligoni ordinati per area decrescente
Particelle ordinate per area, dalla più grande alla più piccola.

Distanza dalla linea

Distanza dalla linea di riferimento tutti i tipi

Ordina le feature per distanza perpendicolare da una linea di riferimento (un secondo layer di tipo linea), in due modalità:

  • Distanza dal centroide — distanza tra il centroide della feature e la linea
  • Distanza dall'elemento — distanza dal punto più vicino dell'intera geometria alla linea

Dialogo: combo layer linea + modalità  â€¢  Processing: CRITERION=14, REF_LAYER, LINE_DISTANCE_MODE (avanzato). Il layer di riferimento viene riproiettato automaticamente se ha un CRS diverso dal layer di input.

Caso d'uso: edifici ordinati per distanza crescente da una strada o dalla linea di costa, per dare priorità alle unità più vicine in un sopralluogo.
Edifici ordinati per distanza crescente da una strada di riferimento
Distanza dalla linea, modalità "elemento": ordine crescente dalla strada di riferimento.

Posizione lungo linea

Posizione lungo linea di riferimento tutti i tipi

Ordina le feature secondo la loro posizione proiettata lungo una linea di riferimento (progressiva chilometrica), in tre modalità:

  • Proiezione centroide — tutte le feature — ogni feature viene proiettata sulla linea e ordinata per la posizione risultante, anche se non la interseca
  • Solo intersecanti — via centroide proiettato — come sopra, ma solo le feature che intersecano la linea; le altre sono escluse dall'ordinamento
  • Solo intersecanti — via primo punto di contatto — come sopra, ma la posizione è quella del primo punto di intersezione, non del centroide proiettato

Dialogo: combo layer linea + modalità  â€¢  Processing: CRITERION=13, REF_LAYER, LINE_MODE (avanzato)

Caso d'uso: pali della luce, cippi chilometrici o sostegni di un elettrodotto numerati progressivamente lungo il tracciato di una strada, ferrovia o linea elettrica.
Pali numerati progressivamente lungo una linea di riferimento
Posizione lungo linea: numerazione progressiva dei pali lungo il tracciato.

Curva di Hilbert

Curva di Hilbert (ordinamento spaziale) tutti i tipi

Ordina le feature lungo una curva di Hilbert calcolata sui centroidi, normalizzati sull'extent complessivo del layer: le feature vicine nello spazio restano vicine anche nell'ordine risultante — a differenza di un ordinamento per riga (X o Y) che può produrre salti lunghi tra feature spazialmente vicine ma agli estremi opposti di una riga.

Processing: CRITERION=15, parametro avanzato HILBERT_ORDER (default 16, risoluzione della griglia — non serve quasi mai cambiarlo)

Non disponibile come criterio primario in modalità multi-criterio: richiede l'extent calcolato su tutte le feature del layer prima di poter assegnare l'ordine.
Caso d'uso: scrivere un GeoPackage con feature spazialmente coerenti in lettura (letture più veloci per query di bounding box), oppure ordinare le tavole di un atlante "a percorso continuo" senza salti tra pagine consecutive.
Punti ordinati lungo una curva di Hilbert
Curva di Hilbert: l'ordine segue un percorso spazialmente continuo, senza salti lunghi.

Serpentina (boustrophedon)

Serpentina tutti i tipi

Ordina le feature a bande, con l'asse trasversale alternato crescente/decrescente da una banda alla successiva — l'ordine classico per numerare le tavole di una serie cartografica a taglio regolare o un percorso di volo fotogrammetrico, senza il salto lungo da fine banda a inizio banda successiva tipico di un ordinamento a righe semplice.

  • Orientamento bande — orizzontali (per Y, X alternato — default) o verticali (per X, Y alternato)
  • Dimensione banda — altezza (orizzontali) o larghezza (verticali) di ciascuna banda, nelle unità del CRS; 0/vuoto = automatica, dalla dimensione media delle bounding box delle feature
  • Angolo di partenza — combinando la Direzione generale (quale banda è la prima) con Prima banda in verso crescente (quale verso ha l'asse trasversale nella prima banda) si sceglie liberamente uno qualunque dei quattro angoli della griglia come punto di partenza

Dialogo: combo orientamento + spin box dimensione banda + checkbox "Prima banda in verso crescente"  â€¢  Processing: CRITERION=17, BAND_AXIS, BAND_SIZE, CROSS_ASCENDING (tutti avanzati)

Non disponibile come criterio primario in modalità multi-criterio: richiede le bande calcolate su tutte le feature.
Caso d'uso: numerare le tavole di una cartografia a taglio regolare o pianificare l'ordine di acquisizione di un volo fotogrammetrico, seguendo il percorso reale del velivolo (avanti su una banda, indietro sulla successiva) invece di ripartire ogni volta dal bordo opposto.
Griglia di tavole ordinate a serpentina
Serpentina orizzontale: bande per Y, X alternato — nessun salto tra fine banda e inizio della successiva.

Ordinamento multi-criterio (gerarchico)

Imposta un criterio secondario per spezzare i pareggi del criterio primario. Ogni livello ha la propria direzione (ascendente/discendente).

Esempio: primario = Regione (ascendente), secondario = Area (discendente). Le feature vengono raggruppate per regione e, all'interno di ciascun gruppo, ordinate dall'area maggiore alla minore.
Poligoni raggruppati per regione e ordinati per area decrescente all'interno di ciascun gruppo
Multi-criterio: regione (asc.) poi area (desc.) — ordine gerarchico a due livelli.

Dialogo: combo "Criterio secondario"  â€¢  Processing: SECONDARY_CRITERION, SECONDARY_FIELD, SECONDARY_EXPRESSION, SECONDARY_DIRECTION (tutti avanzati)

Il criterio secondario è ignorato quando il criterio primario è basato su una linea di riferimento (posizione/distanza lungo linea), è la curva di Hilbert o la serpentina.

Misura geodetica (CRS geografici)

Su un layer con CRS in gradi (es. EPSG:4326) le misure planari di area e lunghezza sono espresse in gradi² o gradi — valori metricamente privi di significato, che possono alterare l'ordinamento in base alla latitudine. GeoSort può calcolare automaticamente area, perimetro, lunghezza e distanze sull'ellissoide (misura geodetica, in m² o m).

ModalitàComportamento
Auto (default)geodetica attivata automaticamente se il CRS è in gradi; su CRS proiettati restano le misure planari. Un avviso non bloccante segnala l'attivazione.
Sempregeodetica sempre abilitata, indipendentemente dal CRS.
Maimisura sempre planare, indipendentemente dal CRS.

Criteri interessati: area poligono, perimetro poligono, lunghezza linea, distanza centroide da punto di riferimento, distanza dalla linea di riferimento.

I criteri bounding box e posizione lungo linea restano sempre planari: il bounding box è un concetto nelle coordinate native, e la posizione lungo linea è monotona e invariante rispetto alla scala.

Dialogo: combo "Misura su CRS geografico"  â€¢  Processing: parametro avanzato GEODESIC (Auto/Sempre/Mai)

Numerazione personalizzata

Il campo progressivo è configurabile su tre assi, sia nel dialogo che nel Processing:

ParametroDefaultEsempio
Nome del camposort_orderrank, ordine — se il campo esiste già sul layer, viene sovrascritto invece di duplicato
Valore iniziale10 per una numerazione da zero
Passo110 → 10, 20, 30…, per lasciare spazio a inserimenti futuri

Processing: parametri avanzati ORDER_FIELD, START, STEP

Opzionalmente, GeoSort può aggiungere anche un campo sort_value con il valore grezzo del criterio usato (es. l'area, la distanza) — checkbox "Aggiungi campo con il valore del criterio usato" nel dialogo, ADD_VALUE_FIELD nel Processing.

Solo feature selezionate

  • Con la checkbox Ordina solo le feature selezionate, l'ordinamento considera esclusivamente le feature selezionate sul layer; in modalità Aggiorna layer corrente il campo sort_order viene scritto solo su di esse.
  • Nel Processing Toolbox la stessa funzione è offerta dalla spunta nativa di QGIS Solo feature selezionate sul layer di input (QgsProcessingFeatureSourceDefinition(..., selectedFeaturesOnly=True) da PyQGIS).

Output

  • Aggiorna il layer corrente — aggiunge o aggiorna il campo progressivo (default sort_order). Se il campo esiste già, viene chiesta conferma prima di sovrascriverlo. La scrittura è racchiusa in un singolo comando di undo, annullabile con Ctrl+Z anche su migliaia di feature.
  • Crea nuovo layer in memoria — crea una copia ordinata senza modificare l'originale.

Processing Toolbox & PyQGIS

GeoSort è disponibile anche nel Processing Toolbox: Toolbox → GeoSort → Ordina feature (GeoSort), utilizzabile in batch, nel modellatore grafico e via PyQGIS headless:

import processing
result = processing.run("geosort:geosort_sort", {
    'INPUT': layer,
    'CRITERION': 0,          # 0 = Attributo tabellare (vedi elenco criteri sopra)
    'ATTRIBUTE_FIELD': 'regione',
    'DIRECTION': True,        # True = Ascendente
    'NULLS_LAST': True,
    'NATURAL_SORT': False,    # True = Natural Sort (cifre come numeri)
    'SECONDARY_CRITERION': 5,     # 5 = Area (poligoni)
    'SECONDARY_DIRECTION': False, # False = Discendente
    'ADD_VALUE_FIELD': False,
    'START': 0,                # default 1
    'STEP': 10,                 # default 1 → 0, 10, 20, 30...
    'ORDER_FIELD': 'rank',     # default 'sort_order'
    'OUTPUT': 'memory:'
})
output_layer = result['OUTPUT']

Per il criterio centroid_dist (indice 3) è possibile indicare un punto di riferimento diverso dall'origine:

result = processing.run("geosort:geosort_sort", {
    'INPUT': layer,
    'CRITERION': 3,
    'REF_POINT': '500000,4649776 [EPSG:32633]',
    'DIRECTION': True,
    'OUTPUT': 'memory:'
})

Per ordinare solo le feature selezionate da PyQGIS:

from qgis.core import QgsProcessingFeatureSourceDefinition
result = processing.run("geosort:geosort_sort", {
    'INPUT': QgsProcessingFeatureSourceDefinition(layer.id(), selectedFeaturesOnly=True),
    'CRITERION': 1,
    'OUTPUT': 'memory:'
})

Casi d'uso tipici

ObiettivoCriterio consigliato
Numerare le tavole di una cartografia a taglio regolare o pianificare un volo fotogrammetricoSerpentina
Scrivere un GeoPackage con letture spazialmente più veloci, o un atlante "a percorso continuo"Curva di Hilbert
Ordinare particelle catastali per dimensione, dalla più grande alla più piccolaArea (discendente)
Numerare pali, cippi o sostegni lungo una strada/ferrovia/elettrodottoPosizione lungo linea
Ordinare edifici per vicinanza a una strada o alla costaDistanza dalla linea
Report ordinato per regione e, a parità di regione, per areaMulti-criterio (regione → area)
Ordinare codici alfanumerici tipo FILE1, FILE2, FILE10 nell'ordine "naturale"Attributo + Natural Sort
Ordinamento radiale da una centrale operativa o un nodo di reteCentroide — distanza

FAQ / Troubleshooting

Alcune feature finiscono sempre in fondo, perché?

Hanno geometria NULL/vuota, oppure un tipo non compatibile con il criterio scelto (es. punti con criterio "area" su un layer a geometria mista). GeoSort non genera errore in questi casi: relega semplicemente quelle feature in coda all'ordine.

Perché l'ordine per area cambia se sposto il layer su un altro CRS?

Su CRS geografici (gradi) le misure planari non sono metricamente significative. Vedi Misura geodetica: in modalità Auto (default) GeoSort passa automaticamente alla misura sull'ellissoide quando rileva un CRS geografico.

Serpentina e Curva di Hilbert non compaiono come criterio secondario, perché?

Entrambi richiedono di calcolare bande o extent sull'intero layer prima di poter assegnare un ordine — un requisito incompatibile con il ruolo di "tie-break" del criterio secondario, che opera solo all'interno dei gruppi già ordinati dal primario. Lo stesso vale per i criteri basati su una linea di riferimento.

Posso annullare l'ordinamento dopo averlo applicato?

Sì, con Ctrl+Z: la scrittura del campo sort_order è racchiusa in un unico comando di undo, anche su migliaia di feature.