Bài 6: Thêm lớp Raster

- Quảng cáo -

Cho đến nay, chúng ta chỉ xử lý các lớp Vector. Bây giờ xem xét đến vấn đề Raster!

Thê một lớp Raster rất giống với tải một lớp Vectơ. Thay vì addVectorLayer(), chúng tôi sử dụng addRasterLayer() và tham số nhà cung cấp thay đổi từ “ogr” sang “gdal”:

uri ="E:/Geodata/qgis_sample_data/raster/SR_50M_alaska_nad.tif"
rlayer =iface.addRasterLayer(uri,"my raster","gdal")
if rlayer.isValid():
print("This is a valid raster layer!")
else:
print("This raster layer is invalid!")

Cả hai đối tượng QssRasterLayerQssVectorLayer đều có hàm isValid(). Nó có thể được sử dụng để kiểm tra xem lớp có thể được tải đúng không. Trong ví dụ trên, chúng tôi kiểm tra xem lớp raster có hợp lệ không và – tùy thuộc vào kết quả – chúng tôi sẽ in một thông báo tương ứng. Đây là lần đầu tiên chúng tôi sử dụng một câu lệnh if. Giống như với các vòng lặp for mà chúng ta đã sử dụng trước đó, nếu các câu lệnh được theo sau bởi dấu hai chấm và mã sẽ được thực thi nếu điều kiện giữ được thụt vào. Nếu các câu lệnh là một công cụ rất phổ biến để kiểm soát hành vi của các tập lệnh của bạn.

Nếu Raster hợp lệ, chúng ta có thể nhận được một số thông tin về nó:

print("Width: {}px".format(rlayer.width()))
print("Height: {}px".format(rlayer.height()))
print("Extent: {}".format(rlayer.extent().toString()))

Chúng tôi đã sử dụng định dạng chuỗi trước đây. Nó là một cách tốt để định dạng đầu ra tập lệnh. Lưu ý cách chúng tôi sử dụng rlayer.extent().ToString() thay vì chỉ rlayer.extent(). Nếu không gọi toString(), đầu ra sẽ giống như:
Extent: <qgis._core.QgsRectangle object at 0x0000028CDA596E58> 
cho chúng ta biết rằng rlayer.extent() trả về một đối tượng QssRonymous nhưng không cho chúng ta biết phạm vi lớp thực tế.

Bên cạnh việc kiểm tra kích thước và mức độ Raster, một nhiệm vụ phổ biến khác là lấy các giá trị pixel raster. Để có được các giá trị tối thiểu và tối đa của Raster một băng tần, chúng ta có thể truy cập vào số liệu thống kê dữ liệu của nó:

stats =rlayer.dataProvider().bandStatistics(1)
print("Min value: {}".format(stats.minimumValue))
print("Max value: {}".format(stats.maximumValue))

bandStatistic (1) trả về một đối tượng QSSRasterBandStats cho băng raster đầu tiên (và chỉ trong trường hợp của chúng tôi). Đối tượng này cung cấp quyền truy cập vào một vài số liệu thống kê ngoài tối thiểu và tối đa.

Trên đây là những điều cơ bản để làm việc với các lớp raster. Bạn cũng đã thấy cách sử dụng các câu lệnh if để kiểm tra xem một điều kiện nhất định có được thực hiện hay không.

Bình luận bằng Facebook Comments

MẠNG XÃ HỘI

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