Sortieren nach mehreren Feldern gleichzeitig in QGIS?

17

Kann man in QGIS mehrere Felder gleichzeitig sortieren?

Zum Beispiel möchte ich eine Tabelle nach dem Namen des Bundesstaats sortieren und dann in jedem Bundesstaat nach dem Namen des Bundesstaats sortieren.

Dies entspricht der Option "Erweitertes Sortieren" in ArcMap.

Stu Smith
quelle

Antworten:

3

Es gibt tatsächlich einen sehr einfachen Trick. Angenommen, Sie möchten zuerst nach Feld "A" und dann nach Feld "B" in "A" sortieren. Klicken Sie zunächst mit der linken Maustaste auf die Überschrift des Feldes "B" (klicken Sie einmal für aufsteigende Sortierung, ein zweites Mal für absteigende Sortierung) in der Attributtabelle. Klicken Sie dann mit der linken Maustaste auf die Kopfzeile des Feldes "A" (einmal für ASC, zum zweiten Mal für DESC). Diese letzte Aktion hat das sortierte Feld "A", während die Sortierung des Feldes "B" innerhalb identischer Werte von "A" beibehalten wird. Versuchte es mit 3 Feldern und es funktioniert auch (dann wurde langweilig). Ich benutze QGIS 3.6.3-Noosa.

Benoit St-Onge
quelle
Ausgezeichnet! Ich habe es auch mit 3 Feldern (Bundesland, Landkreis, Stadt) getestet und es hat perfekt funktioniert - aufsteigend oder absteigend. 3.8.3.
Stu Smith
8

Sie können das Sort and Number- Plugin verwenden. Sie können eine Attributtabelle nach bis zu 3 Feldern sortieren und anschließend ein zusätzliches Feld erstellen, das die Reihenfolge der sortierten Features enthält.

Haftungsausschluss: Ich bin der Autor des Plugins.

ArMoraer
quelle
hoffentlich klappt es. Ich habe es auf meinen Datensatz mit 150.000 Datensätzen gesetzt und es läuft noch nach 10 Minuten. Dadurch wird die Sortierung in der neuen Spalte hartcodiert, sodass Sie danach sortieren können. Gibt es eine Möglichkeit, die wie in Excel oder ArcMap funktioniert, bei der keine Spalte hinzugefügt wird? siehe desktop.arcgis.com/en/arcmap/10.3/manage-data/tables/…
GeorgeC
1
Ich hoffe auch, dass es funktioniert, ich habe es nie an so großen Datenmengen getestet. Ich glaube nicht, dass es möglich ist, die Anzeigereihenfolge einfach zu ändern, wie in ArcMap. Die QGIS-API bietet hierfür keine Methode. Aus diesem Grund habe ich ein Nummerierungsfeld hinzugefügt, um dieses Problem zu umgehen.
ArMoraer
Es geht immer noch - ArcMap hat es in den 30ern gemacht. Naja. Vielen Dank für die Lösung. Ich werde diese 24 Stunden lang offen halten, um zu sehen, ob jemand andere Vorschläge hat.
GeorgeC
Ok, danke für das Feedback. Das Plugin stützt sich direkt auf Pythons sort()Funktion, ich frage mich, warum es so langsam ist. Ich werde versuchen, einen Trick zu finden, um den Prozess in einer zukünftigen Version zu beschleunigen.
ArMoraer
Nice Tool ... hat mir viel Arbeit
erspart
7

Wenn Sie das Ergebnis dauerhaft speichern möchten, können Sie das Shapefile mit GDAL sortieren

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

Dauerte weniger als 3 Minuten mit einem Shapefile mit einer Million Polygonen.

user30184
quelle
1
danke, aber ich bevorzuge es, nichts dauerhaftes zu tun, da es mehrere Datensätze erzeugt und ich hoffte auch auf einen Weg aus QGIS heraus.
GeorgeC
2
Dann würde ich das Shapefile wahrscheinlich in Spatialite konvertieren. Mit DB Manager können Sie dann SQL-Abfragen erstellen und ausführen. Sie können häufig verwendete Abfragen auch für zukünftige Anforderungen speichern.
user30184
5

Das DB Manager-Plugin in QGIS verfügt jetzt über einen Knoten 'Virtuelle Ebenen', mit dem Sie SQL-Befehle für Shapefiles schreiben können, die in Ihr QGIS-Projekt geladen wurden.

Nachdem Sie nun über diese Funktion verfügen, befindet sich die SQL-Logik zum Sortieren nach mehreren Feldern in der Anweisung ORDER BY. Verwenden Sie dazu asc (aufsteigend), desc (absteigend), und Sie können sie miteinander verbinden, um nach mehreren Spalten zu sortieren:

Bildbeschreibung hier eingeben

Ein zusätzlicher Bonus ist, dass Sie mehr SQL lernen werden. Wenn Sie also die Shapefiles satt haben und die meisten von PostGIS, wird der Sprung nicht so groß sein !!!

DPSSpatial
quelle
Vielen Dank - dies ist eine großartige Lösung, aber für diesen Anwendungsfall möchte ich das Datenformat auch nicht ändern.
GeorgeC
2
Sie können für diese Lösung mit .SHP arbeiten. Das Datenformat wird dadurch nicht geändert. Probieren Sie es aus ...
DPSSpatial
1
@GeorgeC hast du das ausprobiert?
DPSSpatial
5

Dies kann jetzt ohne Plugins oder datenbankspezifische Arbeiten durchgeführt werden, zumindest für Version 3.2+. So sortieren Sie nach mehreren Spalten:

  1. Klicken Sie mit der rechten Maustaste auf die Spaltenüberschrift der Attributtabelle und wählen Sie "Sortieren ...".
  2. Fügen Sie die Funktion concat()zusammen mit den Feldern, nach denen Sie sortieren möchten, in der richtigen Reihenfolge (z. B. concat("column1", "column2")) hinzu. Eine Ausgabevorschau sollte unter Ihrem Code angezeigt werden.
  3. Aktivieren oder deaktivieren Sie das Kontrollkästchen "Aufsteigend sortieren" unten, um die Spaltensortierrichtungen zu konfigurieren.
  4. Klicken Sie auf OK und bestätigen Sie die Sortierung.

Diese Funktionalität wurde über die Ausgabe Nr. 1137 hinzugefügt und in der neuesten (Entwicklungs-) Version des Benutzerhandbuchs behandelt .

Eron Lloyd
quelle
1
Erfolgreich getestet mit QGIS 3.6.
Mr. Che
Ich habe eine verkettete Zeichenfolge und eine Ganzzahl ohne feste Länge verwendet, daher habe ich eine concat("col1", right( ('000' || tostring( "col2" )), 4))
Umgehungslösung verwendet,
2

Nun, es ist 2018 und ich kann nicht glauben, dass dies noch nicht beantwortet wurde.

  1. Öffnen Sie die Attributtabellenansicht und klicken Sie mit der rechten Maustaste auf eine beliebige Spalte. Wählen Sie dann Sortieren ... aus.

  2. Das Dialogfenster zum Konfigurieren der Sortierreihenfolge für Attributtabellen ist jetzt auch mit dem vollständigen Ausdruckseditor geöffnet

  3. Verwenden Sie die COALESCE-Funktion mit den gewünschten Spalten. Dadurch wird beispielsweise eine Tabelle nach 3 Spalten sortiert (zuerst nach ID, dann nach VERSION und dann nach fid).

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

Bildbeschreibung hier eingeben

Klicken Sie auf OK, um die Tabelle zu sortieren

sys49152
quelle
Leider hat Coalesce bei mir nicht funktioniert. Bei einem Test mit einer Shapefile-Attributtabelle mit zwei ganzzahligen Spalten (beide enthalten eine Mischung aus Zahlen und leeren Werten): 1) wurde bei deaktiviertem Kontrollkästchen Aufsteigend sortieren die erste Spalte korrekt (absteigend) sortiert, die zweite Spalte jedoch falsch sortiert aufsteigend für jeden Wert in der ersten Spalte. 2) Wenn die Option Aufsteigend sortieren aktiviert ist, ist das Ergebnis ein Zufallsergebnis, das keinen Sinn ergibt.
Stu Smith
1
Sie können Felder durch "||" verketten. operator, coalesce gibt den ersten Nicht-NULL-Wert zurück, der für die Sortierung nicht gültig ist. Wahrscheinlich sollten Sie eine Formatierung verwenden, um 1 vor 11 zu haben.
Zoltan
1

Das kannst du nicht (zumindest im Moment nicht). Es tut uns leid!

Lesen Sie die QGIS-Dokumentation und scrollen Sie bis zur letzten Zeile.

Eine unangenehme Umgehung wäre, den DBF des Shapefiles in Excel zu ziehen. Sortieren Sie es dort und speichern Sie das Ergebnis. Alternativ können Sie Ihr Shapefile in PostGIS oder SpatialLite importieren, wo Sie eine größere Sortierfunktionalität haben. Grundsätzlich müssen Sie QGIS für die erweiterte Sortierung umgehen.

MappaGnosis
quelle
2
+1 für den korrekten Hinweis, dass es derzeit nicht möglich ist, aber -1 für den Vorschlag, mit dem DBF in Excel herumzuspielen
unterdunkelt
Ich habe gesagt, es war 'böse' :)
MappaGnosis
Sie erwähnen PostGIS und SpatiaLite: Können Sie ein Beispiel dafür zeigen, wie das OP in QGIS auch mit einem db-Plugin ausgeführt werden kann?
steko
0

Wie von @Sylvester Sneekly vorgeschlagen, können Sie, wenn Ihre Daten in ein RDBMS wie PosGIS oder SpatialLite geladen werden, eine Datenbankansicht im RDBMS erstellen, die die Tabellendaten vorsortiert, und dann die vorsortierte Ansicht als Layer in QGIS laden.

RyanKDalton-OffTheGridMaps
quelle