Trang chủ QGIS Lập trình PyQGIS cho người không chuyên Bài 7: Chạy công cụ xử lý (Processing)

Bài 7: Chạy công cụ xử lý (Processing)

- Quảng cáo -

Sau khi đã quen với các kiến ​​thức cơ bản về Vectơ và Raster, hãy cùng đến với một chủ đề nâng cao hơn và xem cách chúng ta có thể sử dụng Processing trong PyQGIS để thực hiện các nhiệm vụ phân tích không gian khác nhau.

Nếu bạn đã từng nhìn vào lịch sử Processing (Processing | History), bạn có thể nhận thấy rằng nó lưu giữ các bản ghi của tất cả các công cụ Processing mà bạn đã thực hiện từ hộp công cụ, bao gồm đoạn mã tương ứng bắt đầu bằng processing.run. Chúng ta có thể sao chép mã này để sử dụng nó trong Python Console. Ví dụ: điều này sẽ chạy thuật toán bộ đệm riêng (dữ liệu từ NaturalEarthData):

uri ="E:/Geodata/NaturalEarth/natural_earth_vector.gpkg|layername=ne_110m_populated_places"result =processing.run("native:buffer", {'INPUT':uri,'DISTANCE':10,'SEGMENTS':5,'END_CAP_STYLE':0,'JOIN_STYLE':0,'MITER_LIMIT':2,'DISSOLVE':False,'OUTPUT':'memory:'})

Cho đến nay, điều này vẫn chưa tải kết quả. Lớp Vectơ kết quả có thể được truy cập bằng kết quả [‘OUTPUT’]. Để thêm nó vào dự án hiện tại, chúng tôi sử dụng:

QgsProject.instance().addMapLayer(result['OUTPUT'])

Đây là lần đầu tiên chúng ta sử dụng QssProject.instance() để truy cập đối tượng dự án QGIS hiện tại. Đối tượng này có nhiều chức năng hữu ích, bao gồm thêm và xóa các lớp bản đồ.

Hãy kiểm tra mã code xem sao ! processing.run có hai tham số: đầu tiên là tên thuật toán. Tham số thứ hai là các cài đặt thuật toán trong ngoặc nhọn {}. Cho đến nay, chúng tôi chỉ sử dụng dấu ngoặc nhọn để định dạng chuỗi. Ở đây, chúng tôi sử dụng chúng để tạo một  dictionary tham số đầu vào cho thuật toán xử lý. Hãy để có một cái nhìn sâu hơn về từ điển (viết tắt là dict) với một số ngắt dòng được thêm vào để dễ đọc:

{'INPUT':uri,
'DISTANCE':10,
'SEGMENTS':5,
'END_CAP_STYLE':0,
'JOIN_STYLE':0,
'MITER_LIMIT':2,
'DISSOLVE':False,
'OUTPUT':'memory:'}

Từ điển (dictionary) có nhiều mục và mỗi mục bao gồm một khóa (ví dụ: ‘INPUT’) và một giá trị (ví dụ: biến uri). Do đó, các mục thường được gọi là cặp khóa-giá trị (key-value pairs).

Các tham số đầu vào không phải là từ điển duy nhất trong ví dụ này. Kết quả được trả về bởi processing.run() cũng là một từ điển và nó cho thấy cách chúng ta có thể truy cập vào một mục cụ thể bằng cách cung cấp khóa tương ứng bằng dấu ngoặc vuông: result [‘OUTPUT’]

Một vài mục trong từ điển đầu vào không quá tự giải thích. Chẳng hạn, ‘JOIN_STYLE’:0 có nghĩa là gì? Để trả lời các câu hỏi như thế này, chúng ta có thể sử dụng hàm algorithmHelp():

processing.algorithmHelp("native:buffer")

Trợ giúp cho chúng tôi biết rằng các giá trị khả dụng cho kiểu tham gia là 0: Round, 1: Mitre và 2: Bevel.

Thay vì chạy thuật toán trước và tải kết quả ở bước thứ hai, cũng có một hàm gọi là runAndLoadResults():

processing.runAndLoadResults("native:buffer", {'INPUT':uri,'DISTANCE':10,'SEGMENTS':5,'END_CAP_STYLE':0,'JOIN_STYLE':0,'MITER_LIMIT':2,'DISSOLVE':False,'OUTPUT':'memory:'})

Trên đây là những điều cơ bản của việc sử dụng các thuật toán xử lý trong PyQGIS. Bạn cũng đã thấy cách tạo từ điển và truy cập các mục từ điển.

Bình luận bằng Facebook Comments

MẠNG XÃ HỘI

1,010ThíchThích
435Đă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...