Trang chủ QGIS Lập trình PyQGIS cho người không chuyên Bài 3: Xem các thuộc tính lớp vector

Bài 3: Xem các thuộc tính lớp vector

- Quảng cáo -

Bài 01: Hello world!
Bài 02: Tải 1 lớp vector
Bài 04: Tính năng lọc

Sau khi tải một lớp vectơ, xem các thuộc tính của nó là bước logic tiếp theo.

Trước đây chúng tôi đã lưu ý rằng hàm addVectorLayer () trả về một đối tượng QssVectorLayer. Trong bối cảnh này, “returns” có nghĩa là hàm này tạo ra một đối tượng mà chúng ta có thể sử dụng. Nói iface để thêm một lớp vectơ tương tự như nói với một nhà hàng để làm cho bạn một chiếc bánh pizza. Nếu mọi thứ đều ổn (cho dù đó là nấu ăn hay tạo đối tượng), bạn sẽ có một chiếc bánh pizza để ăn – hoặc một lớp vectơ để tiếp tục làm việc.

Chúng ta cần đặt tên cho đối tượng QssVectorLayer được trả về để chúng ta có thể tham khảo nó sau. Chúng tôi đã chọn cách gọi nó là vlayer:

 uri = "E:/Geodata/NaturalEarth/vector_v4/natural_earth_vector.gpkg_v4.1.0/packages/natural_earth_vector.gpkg|layername=ne_10m_admin_0_countries"
vlayer = iface.addVectorLayer(uri, "countries", "ogr") 

Khi chúng ta gọi hàm addVectorLayer (), có rất nhiều điều xảy ra trong chế độ nền (background): QGIS kiểm tra đường dẫn lớp vectơ và cố gắng mở nó bằng cách sử dụng nhà cung cấp mà chúng ta đã chỉ định. Nếu thành công, nó thêm lớp vào dự án bằng tên chúng tôi đã cung cấp. Nó cũng đảm bảo rằng bản đồ được vẽ lại để chúng ta thực sự có thể nhìn thấy lớp mới trên bản đồ. Và cuối cùng nhưng không kém phần quan trọng, nó trả về đối tượng QssVectorLayer mới được tạo để chúng ta có thể sử dụng nó sau này.

Bây giờ chúng ta có đối tượng vlayer, chúng ta có thể làm gì đó với nó – như mở bảng thuộc tính của nó bằng hàm iface.showAttributionTable:

 iface.showAttributeTable(vlayer) 

Mỗi khi chúng tôi chạy addVectorLayer (), QGIS sẽ tạo một đối tượng QssVectorLayer mới và thêm lớp vào dự án. Nếu bạn muốn ngăn một đoạn mã cụ thể được thực thi, bạn có thể nhận xét nó bằng cách đặt hashtag trước mã:

 uri = "E:/Geodata/NaturalEarth/vector_v4/natural_earth_vector.gpkg_v4.1.0/packages/natural_earth_vector.gpkg|layername=ne_10m_admin_0_countries"
#vlayer = iface.addVectorLayer(uri, "countries", "ogr")
iface.showAttributeTable(vlayer) 

Thay vì chỉ mở hộp thoại bảng thuộc tính, tất nhiên chúng ta cũng có thể sử dụng các attributes in code (thuộc tính trong mã). Như với đối tượng iface mà chúng ta đã xử lý trước đó, các đối tượng QqsVectorLayer có rất nhiều hàm (phương thức). Để có được danh sách các tên thuộc tính (hoặc trường) được in ra bàn điều khiển, chúng ta có thể đi qua các trường lớp lớp được cung cấp bởi hàm fields(). Hàm này trả về một đối tượng QssFields. Để in tất cả các tên trường vào bảng điều khiển, chúng ta có thể sử dụng vòng lặp for:

for field in vlayer.fields():
print(field.name()) 

Bạn có thể đọc hai dòng mã này dưới dạng: Đối với mỗi trường trong các trường vectơ lớp vectơ, hãy in tên trường. Trong trường hợp này, các fields() là một hàm của đối tượng lớp vectơ của chúng ta trong khi trường là một tên biến có thể được chọn tự do.

Theo cách tương tự, chúng ta có thể in giá trị thuộc tính ADMIN của các tính năng lớp của lớp bằng cách sử dụng hàm getFeatures ():

for feature in vlayer.getFeatures():
print(feature["ADMIN"]) 

Mã này là ví dụ đầu tiên về cách mã Python được cấu trúc bằng cách indenting dòng mã (nghĩa là đặt khoảng trắng hoặc tab ở đầu dòng). Nếu bạn bỏ qua khoảng trắng trước chức năng in, bạn sẽ thấy một lỗi. Số lượng không gian chính xác (hoặc có nên sử dụng khoảng trắng hoặc tab) đã là chủ đề của nhiều cuộc thảo luận. Theo mặc định, trình chỉnh sửa mã sẽ chèn 4 khoảng trắng. Điều quan trọng là phải nhất quán và tránh trộn lẫn các kiểu thụt đầu dòng khác nhau. Nó không phải là hiếm khi gặp lỗi vì các tab được trộn lẫn với khoảng trắng.

Đây là những điều cơ bản để xem tên và giá trị thuộc tính của lớp vector. Bạn cũng đã thấy cách viết một vòng lặp for để lặp qua các lớp và các tính năng của lớp vector.

Bình luận bằng Facebook Comments

MẠNG XÃ HỘI

1,010ThíchThích
263Đăng kýĐăng Ký

TOOL PXTmap.com

BÀI VIẾT LIÊN QUAN

Bài 14: Viết kịch bản xử lý

Trong các bài trước, chúng tôi đã đề cập đến cách chạy các công cụ Processing cũng như cách xâu chuỗi các...

Bài 13: Tạo các hàm để tải các lớp GeoPackage

Hiện tại chúng ta đã từng sử dụng GeoPackages. Ví dụ: trong Tải một lớp vectơ, chúng tôi đã giới thiệu cách...

Bài 12: Sử dụng biểu thức để tính giá trị

Trong các bài trước đây, chúng tôi đã đề cập đến cách tạo các lớp vectơ, cách thêm các trường vào bảng...

Bài 11: Quản lý các lớp dự án (đổi tên và loại bỏ)

Trong các bài trước, chúng tôi đã đề cập đến việc thêm các lớp từ các tệp cũng như tạo các lớp...

Bài 10: Công cụ chuỗi xử lý (Chaining Processing)

Trong Bài 7: Chạy công cụ xử lý (Processing), chúng ta đã khám phá những điều cơ bản của việc chạy các...