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