Bài 01: Hello world!
Bài 03: Xem các thuộc tính lớp vector
Bài 04: Tính năng lọc
Mở một lớp vectơ, chẳng hạn như bộ dữ liệu quốc gia có trong Natural Earth geopackage, sử dụng GUI đơn giản như nhấp đúp vào nó trong trình quản lý nguồn dữ liệu hoặc kéo và thả nó vào cửa sổ bản đồ:

Nếu ta muốn làm điều tương tự bằng Python, ta cần biết nguồn chính xác của dữ liệu lớp. Thông tin này có thể được tìm thấy trong các thuộc tính lớp. Lưu ý cách nguồn chứa đường dẫn đến địa lý cũng như thông tin về tên lớp của lớp quốc gia:

Sao chép thông tin nguồn, chúng tôi sẽ cần nó! Lưu ý dấu gạch chéo về phía trước / trong đường dẫn tệp. Ngay cả trên Windows, bạn nên sử dụng dấu gạch chéo về phía trước thay vì dấu gạch chéo ngược để tránh lỗi.
Hãy trở lại với Python console. Như đã đề cập trong ví dụ Hello world, Python console tương tác sẽ thực thi ngay mã code chúng ta nhập khi nhấn Enter. Vì chúng tôi dự định viết nhiều hơn một dòng mã trong ví dụ này (thực tế là hai dòng), sẽ thuận tiện khi sử dụng trình chỉnh sửa mã tích hợp thay vì bảng điều khiển tương tác. Nó về cơ bản là một trình soạn thảo văn bản cho phép bạn làm việc trên nhiều dòng mã cho đến khi bạn vui vẻ và muốn thực thi tất cả cùng một lúc. Nút Show Editor trong bảng điều khiển Python mở bảng soạn thảo mã:

Bây giờ đã đến lúc sử dụng thông tin nguồn mà chúng tôi đã sao chép từ các thuộc tính lớp. Chúng tôi tạo một biến gọi là uri và lưu trữ chuỗi thông tin nguồn trong đó. Chúng tôi chọn gọi biến uri – chúng tôi có thể gọi nó là bất cứ thứ gì chúng tôi thích. Sau đó, chúng ta có thể sử dụng uri làm một trong ba tham số của hàm iface.addVectorLayer:
uri =
"E:/Geodata/NaturalEarth/vector_v4/natural_earth_vector.gpkg_v4.1.0/packages/natural_earth_vector.gpkg|layername=ne_10m_admin_0_countries"
iface.addVectorLayer(uri, "countries", "ogr")
Nếu bạn nhấn nút Run Script, mã sẽ được thực thi và QGIS sẽ tải lớp vào dự án hiện tại. Xin chúc mừng!
Điều đó thật tuyệt vời nhưng điều gì mà trò chơi iface này? iface là một object (đối tượng) thuộc về QGIS – thứ gì đó có các thuộc tính và hành vi mà chúng ta có thể sử dụng để tương tác với QGIS. iface là một đối tượng rất quan trọng trong QGIS vì không có nó, chúng tôi không thể tương tác với QGIS hoặc bất kỳ lớp nào được tải trong dự án của chúng tôi. Trong mã của chúng tôi, chúng tôi đã bảo đối tượng iface thực thi một trong các hàm được liên kết với nó – trong trường hợp này là hàm addVectorLayer. Các đối tượng khác nhau được liên kết với các chức năng khác nhau. Chỉ để làm cho cuộc sống khó hiểu, các chức năng đôi khi được gọi là phương thức. Bạn có thể tìm thấy danh sách tất cả các chức năng trong tài liệu chính thức của PyQGIS. Bạn sẽ thấy rằng addVectorLayer được liệt kê trong tài liệu dưới dạng một phương thức thuộc về iface với mô tả sau:
addVectorLayer
(self, vectorLayerPath: str, baseName: str, providerKey: str) → QgsVectorLayer
Một số thông tin về các tham số của addVectorLayer:
- Tham số đầu tiên là self. Đây là một tham số mặc định được yêu cầu khi viết nhiều hàm Python nhưng nó không phải được cung cấp khi gọi hàm. Do đó, chúng ta có thể bỏ qua nó và bỏ qua tham số thứ hai:
- Mô tả cho thấy rằng vectorLayerPath phải là một chuỗi (str). Trong ví dụ của chúng tôi ở trên, chúng tôi đã sử dụng biến uri chuỗi để cung cấp đầu vào này.
- Tham số tiếp theo là một chuỗi được gọi là baseName. Đây sẽ là tên lớp được hiển thị trong danh sách lớp và chúng ta có thể chọn một giá trị một cách tự do.
- Cuối cùng, tham số cuối cùng là một chuỗi có tên là CarrierKey. Đối với hầu hết các định dạng dữ liệu vectơ (bao gồm Geopackage và Shapefile), nhà cung cấp lựa chọn sẽ là OGR. Các khóa của nhà cung cấp véc tơ khác bao gồm: “postgres”, “delimitedtext”, “gpx”, “spatialite”, and “WFS”.
Phần cuối cùng của mô tả (→ QssVectorLayer) có nghĩa là hàm trả về đối tượng QssVectorLayer đã tạo.
Đừng quên GHI LẠI ! Vì các tập lệnh không được lưu tự động khi thoát khỏi QGIS, bạn nên đảm bảo lưu tập lệnh theo cách thủ công bằng nút lưu trong trình chỉnh sửa.
Đây là những điều cơ bản của việc sử dụng trình soạn thảo mã để viết nhiều dòng mã có thể được thực thi cùng một lúc.
Bình luận bằng Facebook Comments