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 QssRasterLayer và QssVectorLayer đề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