Odpowiedzi:
W rzeczywistości istnieje bardzo prosta sztuczka. Załóżmy, że chcesz najpierw posortować według pola „A”, a następnie według pola „B” w obrębie „A”. Najpierw kliknij lewym przyciskiem myszy nagłówek pola „B” (kliknij raz, aby posortować rosnąco, drugi raz, aby zejść) w tabeli atrybutów. Następnie kliknij lewym przyciskiem myszy nagłówek pola „A” (raz dla ASC, drugi raz dla DESC). Ta ostatnia czynność posortuje pole „A”, zachowując sortowanie pola „B” w obrębie identycznych wartości „A”. Wypróbowałem go z 3 polami, a także działa (potem się nudził). Używam QGIS 3.6.3-Noosa.
Możesz użyć wtyczki Sortuj i Numeruj. Umożliwia sortowanie tabeli atrybutów według maksymalnie 3 pól, a następnie tworzy dodatkowe pole, które zawiera kolejność posortowanych elementów.
Oświadczenie: Jestem autorem wtyczki.
sort()
funkcji Pythona , zastanawiam się, dlaczego jest taka wolna. Spróbuję znaleźć jakąś sztuczkę, aby przyspieszyć ten proces w przyszłej wersji.
Jeśli możesz zapisać wynik na stałe, możesz posortować plik kształtu za pomocą 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
Zajęło mniej niż 3 minuty plikiem kształtu o milionie wielokątów.
Wtyczka DB Manager w QGIS ma teraz węzeł „Wirtualne warstwy”, który umożliwia pisanie poleceń SQL przeciwko plikom kształtów załadowanym do twojego projektu QGIS.
Teraz, gdy masz już tę możliwość, logika SQL do sortowania według wielu pól znajduje się w instrukcji ORDER BY, używając asc (rosnąco), desc (malejąco), i możesz je połączyć, aby posortować według wielu kolumn:
Dodatkową korzyścią jest to, że nauczysz się więcej SQL, więc kiedy masz dość plików kształtowych i większość PostGIS, skok nie będzie tak wielki !!!
Można to teraz zrobić bez żadnych wtyczek lub pracy specyficznej dla bazy danych, przynajmniej dla wersji 3.2+. Aby posortować według wielu kolumn:
concat()
wraz z polami, według których chcesz sortować, w odpowiedniej kolejności (np. concat("column1", "column2")
). Podgląd wyjściowy powinien być pokazany poniżej kodu.Ta funkcjonalność została dodana poprzez wydanie nr 1137 i opisana w najnowszej (rozwojowej) wersji instrukcji obsługi .
concat("col1", right( ('000' || tostring( "col2" )), 4))
Cóż, teraz jest 2018, więc nie mogę uwierzyć, że na to jeszcze nie ma odpowiedzi.
Otwórz widok tabeli atrybutów i kliknij prawym przyciskiem myszy dowolną kolumnę, a następnie wybierz Sortuj ...
Okno dialogowe Konfiguruj kolejność sortowania tabeli atrybutów jest teraz otwarta z pełnym edytorem wyrażeń
Użyj funkcji KOPALNOŚĆ z żądanymi kolumnami, na przykład posortuje tabelę według 3 kolumn (najpierw według ID, następnie WERSJA, a następnie fid)
coalesce("ID","VERSION","fid" )
Kliknięcie OK posortuje tabelę
Nie możesz (przynajmniej nie w tej chwili). Przepraszam!
Zobacz dokumentację QGIS i przewiń w dół do ostatniej linii.
Paskudnym obejściem byłoby wciągnięcie DBF Shapefile do Excela. Posortuj to i zapisz wynik. Możesz też zaimportować plik Shapefile do PostGIS lub SpatialLite, gdzie masz większą funkcjonalność sortowania. Zasadniczo będziesz musiał ominąć QGIS w celu zaawansowanego sortowania.
Jak sugeruje @Sylvester Sneekly, jeśli twoje dane są ładowane do RDBMS, takiego jak PosGIS lub SpatialLite, możesz rozważyć utworzenie widoku bazy danych w RDBMS, który przesyła dane tabelaryczne, a następnie załadować wstępnie zapisany widok do QGIS jako warstwę.