Sắp xếp theo nhiều lĩnh vực cùng một lúc trong QGIS?


17

Có thể sắp xếp nhiều lĩnh vực cùng một lúc trong QGIS không?

Ví dụ: tôi muốn sắp xếp một bảng theo tên tiểu bang và sau đó trong mỗi tiểu bang, sắp xếp theo tên quận.

Điều này sẽ giống như tùy chọn Sắp xếp nâng cao có sẵn trong ArcMap.

Câu trả lời:


3

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.


Thông minh! Tôi cũng đã thử nghiệm nó với 3 lĩnh vực (tiểu bang, quận, thành phố) và nó hoạt động hoàn hảo - tăng dần hoặc giảm dần. 3.8.3.
Stu Smith

8

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.


hy vọng nó sẽ làm việc Tôi đã đặt nó vào tập dữ liệu kỷ lục 150 nghìn của mình và nó vẫn còn sau 10 phút. Điều này mã hóa sắp xếp trong cột mới để sau đó bạn có thể sắp xếp theo đó - có cách nào hoạt động như trong excel hoặc ArcMap không thêm cột không? xem desktop.arcgis.com/en/arcmap/10.3/manage-data/tables/iêu
GeorgeC

1
Tôi cũng hy vọng nó sẽ hoạt động, tôi chưa bao giờ thử nghiệm nó trên các bộ dữ liệu lớn như vậy. Tôi không nghĩ có thể chỉ cần thay đổi thứ tự hiển thị, như trong ArcMap; API QGIS không cung cấp bất kỳ phương pháp nào để làm như vậy. Đó là lý do tại sao tôi chọn thêm trường đánh số như một cách giải quyết.
ArMoraer

Nó vẫn tiếp tục -ArcMap đã làm điều đó trong khoảng 30 giây. Ồ tốt Tuy nhiên, cảm ơn về giải pháp - Tôi sẽ tiếp tục mở trong 24 giờ để xem có ai có bất kỳ đề xuất nào khác không.
GeorgeC

Ok, cảm ơn đã phản hồi. Plugin phụ thuộc trực tiếp vào 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.
ArMoraer

Công cụ tuyệt vời ... đã tiết kiệm cho tôi rất nhiều công việc ... được đánh giá cao
K_Man

7

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.


1
cảm ơn nhưng tôi không muốn làm bất cứ điều gì lâu dài vì nó sẽ tạo ra nhiều bộ dữ liệu và tôi cũng hy vọng có một cách từ bên trong chính QGIS.
GeorgeC

2
Sau đó, tôi có thể sẽ chuyển đổi shapefile thành Spatialite. Với DB Manager, bạn có thể xây dựng và chạy các truy vấn SQL. Bạn cũng có thể lưu các truy vấn thường được sử dụng cho các nhu cầu trong tương lai.
dùng49584

5

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:

nhập mô tả hình ảnh ở đây

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 !!!


Cảm ơn - đây là một giải pháp tuyệt vời tuy nhiên trong trường hợp sử dụng này, tôi cũng không muốn thay đổi định dạng dữ liệu thành bất kỳ điều gì khác.
GeorgeC

2
Bạn có thể làm việc với .SHP cho giải pháp này - điều này không thay đổi định dạng dữ liệu. Dùng thử ...
DPSSpatial

1
@GeorgeC bạn đã thử điều này?
DPSSpatial

5

Đ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:

  1. Nhấp chuột phải vào tiêu đề cột của bảng thuộc tính và chọn "Sắp xếp ..."
  2. Thêm chức năng 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.
  3. Chọn hoặc bỏ chọn hộp kiểm "Sắp xếp tăng dần" ở dưới cùng để định cấu hình các hướng sắp xếp cột.
  4. Nhấn OK và xác nhận sắp xếp.

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 .


1
Đã thử nghiệm thành công với QGIS 3.6.
Ông Che

Tôi đã nối chuỗi và một số nguyên không có độ dài cố định, vì vậy tôi đã sử dụng một khoảng xung quanh để điền số nguyên vào chuỗi có độ dài cố định:concat("col1", right( ('000' || tostring( "col2" )), 4))
NettaB

2

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.

  1. 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 ...

  2. 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 đủ

  3. 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 mô tả hình ảnh ở đây

Nhấp vào OK sẽ sắp xếp bảng


Thật không may, hợp tác đã không làm việc cho tôi. Trong thử nghiệm sử dụng bảng thuộc tính shapefile với hai cột số nguyên (cả hai đều chứa hỗn hợp số và giá trị trống): 1) với nút Sắp xếp tăng dần không được chọn, kết quả đã sắp xếp cột đầu tiên đúng (giảm dần) nhưng cột thứ hai được sắp xếp không chính xác tăng dần cho mỗi giá trị trong cột đầu tiên. 2) với nút Sắp xếp tăng dần được chọn, kết quả là kết quả ngẫu nhiên không có ý nghĩa.
Stu Smith

1
Bạn có thể nối các trường bằng "||" toán tử, kết hợp sẽ trả về giá trị không NULL đầu tiên không hợp lệ để sắp xếp. Có lẽ bạn nên sử dụng một số định dạng để có 1 trước 11.
Zoltan

1

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.


2
1 cho ghi chú đúng là nó hiện không thể nhưng -1 cho thấy rối tung với DBF trong Excel
Underdark

Tôi đã nói rằng đó là 'khó chịu' :)
MappaGnosis

Bạn đề cập đến PostGIS và SpatiaLite: bạn có thể đưa ra một ví dụ về cách thực hiện những gì OP yêu cầu từ bên trong QGIS, cũng bằng cách sử dụng plugin db?
steko

0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.