Câu trả lời:
Thực sự có một mẹo rất đơn giản. Giả sử bạn muốn sắp xếp theo trường "A" trước, sau đó theo trường "B" trong "A". Nhấp chuột trái đầu tiên vào tiêu đề của trường "B" (nhấp một lần để sắp xếp tăng dần, lần thứ hai để giảm dần) trong bảng thuộc tính. Sau đó nhấp chuột trái vào tiêu đề của trường "A" (một lần cho ASC, lần thứ 2 cho DESC). Hành động cuối cùng này sẽ có trường được sắp xếp "A", trong khi duy trì việc sắp xếp trường "B" trong các giá trị giống hệt của "A". Đã thử nó với 3 trường và nó cũng hoạt động (sau đó chán). Tôi đang sử dụng QGIS 3.6.3-Noosa.
Bạn có thể sử dụng plugin Sắp xếp và Số . Nó cho phép bạn sắp xếp một bảng thuộc tính theo tối đa 3 trường, sau đó nó tạo ra một trường bổ sung có chứa thứ tự của các tính năng được sắp xếp.
Disclaimer: Tôi là tác giả của plugin.
sort()
chức năng của Python , tôi tự hỏi tại sao nó lại chậm như vậy. Tôi sẽ cố gắng tìm một số mẹo để làm cho quá trình nhanh hơn trong phiên bản tương lai.
Nếu ổn để lưu kết quả vĩnh viễn, bạn có thể sắp xếp shapefile bằng 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
Mất ít hơn 3 phút với một shapefile có một triệu đa giác.
Trình cắm DB Manager trong QGIS hiện có nút 'Lớp ảo' cho phép bạn viết các lệnh SQL chống lại các shapefile được tải vào dự án QGIS của bạn.
Vì vậy, bây giờ bạn có khả năng này, logic SQL để sắp xếp theo nhiều trường nằm trong câu lệnh ORDER BY, sử dụng asc (tăng dần), desc (Giảm dần) và bạn có thể xâu chuỗi chúng lại với nhau để sắp xếp theo nhiều cột:
Một phần thưởng bổ sung là bạn sẽ học được nhiều SQL hơn, vì vậy khi bạn phát ốm với shapefiles và hầu hết với PostGIS, bước nhảy vọt sẽ không tuyệt vời lắm !!!
Điều này bây giờ có thể được thực hiện mà không cần bất kỳ plugin hoặc công việc cụ thể cơ sở dữ liệu nào, ít nhất là cho phiên bản 3.2+. Để sắp xếp theo nhiều cột:
concat()
cùng với các trường bạn muốn sắp xếp theo thứ tự thích hợp (ví dụ concat("column1", "column2")
). Một bản xem trước đầu ra nên được hiển thị bên dưới mã của bạn.Chức năng này đã được thêm vào thông qua vấn đề # 1137 và được đề cập trong phiên bản (phát triển) mới nhất của hướng dẫn sử dụng .
concat("col1", right( ('000' || tostring( "col2" )), 4))
Chà, bây giờ là năm 2018 nên tôi không thể tin điều này chưa được trả lời.
Mở chế độ xem bảng thuộc tính và nhấp chuột phải vào bất kỳ cột nào, sau đó chọn Sắp xếp ...
Cửa sổ hộp thoại Cấu hình thứ tự sắp xếp bảng thuộc tính cũng đang mở với trình soạn thảo biểu thức đầy đủ
Sử dụng hàm COALESCE với các cột mong muốn, ví dụ: thao tác này sẽ sắp xếp một bảng theo 3 cột (đầu tiên là ID sau đó là VERSION và sau đó là fid)
coalesce("ID","VERSION","fid" )
Nhấp vào OK sẽ sắp xếp bảng
Bạn không thể (ít nhất là không phải lúc này). Lấy làm tiếc!
Xem tài liệu của QGIS và cuộn xuống dòng cuối cùng.
Một cách giải quyết khó chịu sẽ là kéo DBF của Shapefile vào Excel. Sắp xếp nó ở đó và lưu kết quả. Hoặc nhập Shapefile của bạn vào PostGIS hoặc SpatialLite nơi bạn có chức năng sắp xếp lớn hơn. Về cơ bản, bạn sẽ phải bỏ qua QGIS để sắp xếp nâng cao.
Theo đề xuất của @Sylvester Sneekly, nếu dữ liệu của bạn được tải vào RDBMS như PosGIS hoặc SpatialLite, bạn có thể xem xét việc tạo chế độ xem cơ sở dữ liệu trong RDBMS để đặt trước dữ liệu dạng bảng, sau đó tải chế độ xem được đặt trước vào QGIS dưới dạng một lớp.