Ordinamento per più campi contemporaneamente in QGIS?


17

È possibile ordinare più campi contemporaneamente in QGIS?

Ad esempio, vorrei ordinare una tabella in base al nome dello stato, quindi all'interno di ogni stato, ordinare in base al nome della contea.

Sarebbe lo stesso dell'opzione Ordinamento avanzato disponibile in ArcMap.

Risposte:


3

In realtà c'è un trucco molto semplice. Supponiamo di voler prima ordinare per campo "A", quindi per campo "B" in "A". Primo clic sinistro sull'intestazione del campo "B" (fare clic una volta per ordine crescente, una seconda volta per ordine decrescente) nella tabella degli attributi. Quindi fare clic sinistro sull'intestazione del campo "A" (una volta per ASC, seconda volta per DESC). Quest'ultima azione avrà ordinato il campo "A", preservando l'ordinamento del campo "B" all'interno di valori identici di "A". Ho provato con 3 campi e funziona anche (poi si è annoiato). Sto usando QGIS 3.6.3-Noosa.


Eccellente! L'ho anche testato con 3 campi (stato, contea, città) e ha funzionato perfettamente - ascendente o discendente. 3.8.3.
Stu Smith,

8

È possibile utilizzare il plug-in Ordinamento e Numero . Ti consente di ordinare una tabella di attributi per un massimo di 3 campi, quindi crea un campo aggiuntivo che contiene l'ordine delle caratteristiche ordinate.

Disclaimer: sono l'autore del plugin.


speriamo che funzioni. L'ho impostato sul mio set di dati da 150k record e continua ancora dopo 10 minuti. Questo hardcodifica l'ordinamento nella nuova colonna in modo da poter quindi ordinare in base a quello: c'è un modo che funziona come in Excel o ArcMap che non aggiunge una colonna? vedi desktop.arcgis.com/en/arcmap/10.3/manage-data/tables/…
GeorgeC

1
Spero anche che funzioni, non l'ho mai testato su set di dati così grandi. Non penso che sia possibile cambiare semplicemente l'ordine di visualizzazione, come in ArcMap; L'API QGIS non fornisce alcun metodo per farlo. Ecco perché ho scelto di aggiungere un campo di numerazione come soluzione alternativa.
ArMoraer,

Sta ancora andando -ArcMap lo ha fatto in circa 30 anni. Oh bene. Grazie per la soluzione, però, lo terrò aperto per 24 ore per vedere se qualcuno ha altri suggerimenti.
GeorgeC,

Ok, grazie per il feedback. Il plugin si basa direttamente sulla sort()funzione di Python , mi chiedo perché sia ​​così lento. Proverò a trovare qualche trucco per rendere il processo più veloce in una versione futura.
ArMoraer,

Nice Tool ... mi ha risparmiato molto lavoro ... molto apprezzato
K_Man,

7

Se è OK per salvare il risultato in modo permanente, è possibile ordinare il file di forma con GDAL

ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "SELECT *
FROM my_shapefile ORDER BY attr_1, attr_2, attr_3" sorted.shp my_shapefile.shp

Ci sono voluti meno di 3 minuti con un file di forma con un milione di poligoni.


1
grazie ma preferisco non fare nulla di permanente in quanto genererà più set di dati e speravo anche in un modo all'interno di QGIS stesso.
GeorgeC,

2
Quindi probabilmente convertirò lo shapefile in Spatialite. Con DB Manager è quindi possibile creare ed eseguire query SQL. È inoltre possibile salvare le query utilizzate di frequente per esigenze future.
user30184

5

Il plug-in DB Manager in QGIS ora ha un nodo "Livelli virtuali" che consente di scrivere comandi SQL rispetto ai file di forma caricati nel progetto QGIS.

Quindi ora che hai questa capacità, la logica SQL per ordinare per più campi è nell'istruzione ORDER BY, usando asc (crescente), desc (decrescente) e puoi metterli insieme per ordinare in base a più colonne:

inserisci qui la descrizione dell'immagine

Un ulteriore vantaggio è che imparerai più SQL, quindi quando ti ammali di shapefile e la maggior parte di PostGIS il salto non sarà così grande !!!


Grazie, questa è un'ottima soluzione, tuttavia per questo caso d'uso non voglio cambiare il formato dei dati in nient'altro.
GeorgeC,

2
Puoi lavorare con .SHP per questa soluzione - questo non cambia il formato dei dati. Provalo ...
DPSSpatial

1
@GeorgeC ci hai provato?
DPSSpatial

5

Ora è possibile farlo senza plug-in o lavori specifici del database, almeno per la versione 3.2+. Per ordinare per più colonne:

  1. Fai clic con il tasto destro del mouse sull'intestazione della colonna della tabella degli attributi e scegli "Ordina ..."
  2. Aggiungi la funzione concat()insieme ai campi per i quali desideri ordinare, nell'ordine corretto (es. concat("column1", "column2")). Un'anteprima di output dovrebbe essere mostrata sotto il tuo codice.
  3. Seleziona o deseleziona la casella di controllo "Ordina in ordine crescente" in basso per configurare le direzioni di ordinamento delle colonne.
  4. Fai clic su OK e conferma l'ordinamento.

Questa funzionalità è stata aggiunta tramite il numero 1137 e trattata nell'ultima versione (di sviluppo) del manuale dell'utente .


1
Testato con successo con QGIS 3.6.
Mr. Che

Ho concatenato una stringa e un numero intero che non ha una lunghezza fissa, quindi ho usato una soluzione per riempire zero l'intero in una stringa di lunghezza fissa:concat("col1", right( ('000' || tostring( "col2" )), 4))
NettaB

2

Bene, è il 2018 ora, quindi non posso credere che non abbia ancora ricevuto risposta.

  1. Apri la vista della tabella degli attributi e fai clic con il tasto destro su qualsiasi colonna, quindi scegli Ordina ...

  2. Finestra di dialogo Configura ordinamento tabella attributi è ora aperto anche con l'editor di espressioni complete

  3. Utilizzare la funzione COALESCE con le colonne desiderate, ad esempio, questo ordinerà una tabella per 3 colonne (prima per ID, poi VERSIONE e poi fid)

coalesce("ID","VERSION","fid" )

inserisci qui la descrizione dell'immagine

Fare clic su OK per ordinare la tabella


Sfortunatamente, la coalizione non ha funzionato per me. In un test che utilizza una tabella degli attributi shapefile con due colonne intere (entrambe contenenti una combinazione di numeri e valori vuoti): 1) con il pulsante Ordina crescente non selezionato, il risultato ha ordinato la prima colonna corretta (decrescente) ma la seconda colonna è stata ordinata in modo errato crescente per ciascun valore all'interno della prima colonna. 2) con il pulsante Ordina in ordine crescente selezionato, il risultato è stato un risultato casuale che non ha senso.
Stu Smith,

1
Puoi concatenare i campi con "||" operatore, la coalesce restituirà il primo valore non NULL che non è valido per l'ordinamento. Probabilmente dovresti usare un po 'di formattazione per avere 1 prima delle 11.
Zoltan,

1

Non puoi (almeno non al momento). Scusate!

Consulta la documentazione di QGIS e scorri verso il basso fino all'ultima riga.

Una brutta soluzione sarebbe quella di estrarre il DBF di Shapefile in Excel. Ordinalo lì e salva il risultato. In alternativa, importa il tuo Shapefile in PostGIS o SpatialLite dove hai una maggiore funzionalità di ordinamento. Fondamentalmente, dovrai bypassare QGIS per l'ordinamento avanzato.


2
+1 per la nota corretta che al momento non è possibile ma -1 per suggerire di fare scherzi con il DBF in Excel
underdark

Ho detto che era "brutto" :)
MappaGnosis,

Tu citi PostGIS e SpatiaLite: potresti mostrare un esempio di come fare ciò che l'OP ha richiesto da QGIS, usando anche un db-plugin?
steko,

0

Come suggerito da @Sylvester Sneekly, se i tuoi dati sono caricati in un RDBMS come PosGIS o SpatialLite, potresti prendere in considerazione la creazione di una vista del database nel RDBMS che presiede i dati tabulari e quindi caricare la vista preordinata in QGIS come un livello.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.