Lựa chọn của Attribution Nhóm trong QGIS bằng python?


16

Có cách nào để sử dụng chức năng "Chọn theo thuộc tính" trong QGIS bằng lệnh python không? Trong plugin của tôi, người dùng nên nhập một giá trị qua GUI và giá trị này sẽ được sử dụng trong một chức năng chọn tất cả các tính năng có thuộc tính này. Tên cột được cố định trong mã, hàm chỉ nên tìm kiếm giá trị chính xác.

Trong giải pháp hiện tại của tôi, hàm kết nối QGIS với cơ sở dữ liệu PostgreSQL và chạy một câu lệnh SQL. Điều này tạo ra một bảng từ kết quả và bảng được hiển thị dưới dạng Shapefile trong QGIS.

Về nguyên tắc, nó sẽ đủ để làm nổi bật các tính năng và không tạo ra một Shapefile mới của lựa chọn. Sử dụng chức năng "Chọn theo thuộc tính" cũng sẽ bỏ qua kết nối cơ sở dữ liệu không cần thiết.

Có cách nào để sử dụng chức năng "Chọn theo thuộc tính" trong python để các tính năng được tô sáng không? Sử dụng chức năng trong QGIS, tất cả các tính năng không phù hợp với truy vấn đều bị xóa trắng tạm thời cũng sẽ ổn.


1
Những câu trả lời cần một bản cập nhật qgis 3.
MonsterMushroom

Câu trả lời:


8

Đúng. Bạn có thể nhận được tất cả các thuộc tính thông qua các ràng buộc python và thực hiện lọc bổ sung trong plugin của riêng bạn. Xem trích đoạn PyQGIS Coobook này cho danh sách và một số ví dụ. Sau đó, bạn sẽ loại trừ mọi kết quả không khớp với từ điển được trả về.

Đối với trực quan hóa, bạn có thể vẫn phải tạo một lớp khác, vì select()không có đối số phù hợp. Bạn có thể sử dụng một lớp bộ nhớ để tránh phải tạo các tệp vật lý (nhiều hơn trong đó trong sách nấu ăn).

biên tập:

Trên thực tế, bạn có thể sử dụng selectedFeaturesIds()với setSelectedFeatures(ids)để thay đổi lựa chọn thành tập hợp con bạn đã tạo. Trích dẫn việc thực hiện trực tiếp:

/** Get a copy of the user-selected features */  
QList<QgsFeature> selectedFeatures();

/** Return reference to identifiers of selected features */
const QSet<qint64> &selectedFeaturesIds() const;

/** Change selection to the new set of features */
void setSelectedFeatures(const QSet<qint64> &ids);

Thật đáng tiếc! Tôi nghĩ rằng điều đó là có thể trong QGIS, bởi vì ArcGIS cũng có thể sử dụng Arcpy. Tuy nhiên, cảm ơn câu trả lời của bạn!
dùngHH

Có lẽ có một cách; Tôi chỉ không biết điều đó. Cung cấp cho người dùng khác của trang web một thời gian - có thể ai đó làm.
lynxlynxlynx

Tôi nghĩ rằng nó phải có thể. Trong QGIS, tất cả các tính năng được trực quan hóa phù hợp với lựa chọn, tất cả các tính năng khác đều bị xóa trắng tạm thời.
dùngHH

Đó là, tôi tìm thấy nó. QGIS thực hiện điều này trong lõi, nhưng có vẻ như nó phơi bày đủ giao diện để điều chỉnh lựa chọn đúng.
lynxlynxlynx

Bạn có thể gửi cho tôi một liên kết?
dùngHH

9

Bắt đầu từ QGIS 2.2, điều này được hỗ trợ theo cách rất tự nhiên. Nó có thể được thực hiện thông qua công cụ biểu thức QGIS bằng QgsFeatureRequest.setFilterExpression( unicode )phương thức này.

# The important part: get the feature iterator with an expression
it = l.getFeatures( QgsFeatureRequest().setFilterExpression ( u'"Counties" = \'Norwich\'' ) )
# Set the selection
l.setSelectedFeatures( [ f.id() for f in it ] )

Điều tốt nhất về nó: nếu bạn có phiên bản QGIS gần đây (2.10 trở lên), thì điều này sẽ được lọc trực tiếp trong cơ sở dữ liệu để thực hiện nhiều hơn các giải pháp khác trong khi vẫn rất dễ đọc.


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.