Tôi chỉ muốn đăng một số cập nhật cho câu trả lời trước đó để thay đổi API PythonIS kể từ phiên bản 2.0 .
Như trước đây, bạn sẽ nhận được một danh sách các tính năng được chọn với iface.activeLayer().selectedFeatures()
, tuy nhiên trong QGIS
các phiên bản >= 2.0
bạn hiện sử dụng chức năng QgsFeature.attributes()
thay vì QgsFeature.attributeMap()
. Hai hàm không hoàn toàn giống nhau: attributes()
bây giờ trả về một danh sách , trong khi cái cũ attributeMap()
trả về một từ điển . Hãy dành ít phút để duyệt qua các tài liệu API cho QgsFeature.attributes()
, QgsAttributes
, vv để hiểu làm thế nào các thuộc tính được lưu trữ / truy cập.
Nếu bạn quan tâm, bạn có thể đọc về một số lý do đằng sau các thay đổi API trên chuỗi danh sách gửi thư này: [Qgis-developer] các tính năng chọn api vector mới . Nói ngắn gọn (theo lời của nhà phát triển QGIS Martin Dobias):
Truy cập vào các thuộc tính: không f.attributeMap()
còn nữa, vì các thuộc tính hiện được lưu trữ trong một vectơ (Python list
:) thay vì bản đồ (Python dict
:). QgsFeature
lớp mô phỏng đối tượng container python
4 để bạn có thể truy cập các thuộc tính như QgsFeature
thể là một danh sách hoặc từ điển, với các khóa là chỉ mục trường hoặc tên trường:
f[0]
... thuộc tính đầu tiên
f["type"]
... thuộc tính có tên "loại"
Vẫn có thể nhận được tất cả các thuộc tính: f.attributes()
trả về một danh sách các giá trị.
Vì vậy, như một ví dụ cụ thể về những gì bạn đã hỏi cách thực hiện (lấy dữ liệu cho một tính năng bạn đã chọn), giả sử bạn có một lớp chứa city
các tính năng mà mỗi tính năng có một danh sách các thuộc tính, bao gồm một county
thuộc tính. Để nhận county
giá trị cho một thành phố cụ thể mà bạn đã chọn (giả sử Helena, AR
), hãy làm như sau trong bảng điều khiển Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Nếu bạn muốn các giá trị của tất cả các trường trong bảng thuộc tính của thành phố, thì bạn chỉ cần sử dụng:
cityData = city.attributes()