Python / GDAL nhận các giá trị duy nhất trong raster có giá trị rời rạc


8

Tôi muốn nhận được một số lời khuyên về cách hiệu quả nhất để trả về một danh sách các giá trị duy nhất của một raster có giá trị rời rạc bằng Python và GDAL.

Tôi đã nghĩ rằng cách rõ ràng nhất sẽ là kiểm tra bảng thuộc tính của raster, nhưng nếu tôi thực hiện band.GetDefaultRAT()trên dải dữ liệu raster có chứa bảng thuộc tính (dù sao thì bảng cũng hiển thị trong ArcCatalog), kết quả luôn luôn là None:

>>> rat = band.GetDefaultRAT()
>>> rat == None
True

Trong trường hợp đó, cuối cùng tôi phải quét qua từng ô của raster và xây dựng một danh sách các giá trị duy nhất theo cách thủ công. Đây có phải là cách duy nhất để làm điều đó?

Hoặc có cách nào để xây dựng bảng thuộc tính với Python và GDAL, sau đó truy vấn nó để xem danh sách các giá trị duy nhất?


Phiên bản nào của GDAL bạn đang sử dụng btw?
RK

Câu hỏi ngu ngốc nhưng RAT là gì?
biệt danh

RAT là viết tắt của Bảng thuộc tính Raster.
Markus M.

Câu trả lời:


10

Nếu tôi hiểu chính xác, bạn có thể sử dụng hàm np.unique từ numpy lib:

from osgeo import gdal
import numpy as np

ds = gdal.Open("myimg.ext")
band =  ds.GetRasterBand(1)
array = np.array(band.ReadAsArray())
values = np.unique(array)

hoặc bạn có thể bắn nó một lần:

values = np.unique(np.array(ds.GetRasterBand(1).ReadAsArray()))

Tại sao phải bọc band.ReadAsArray()trong một np.arraycuộc gọi? Không phải nó đã trả về một mảng numpy?
jpmc26

1
Có nó làm. Gói nó trong np.array không có nhược điểm về hiệu năng, vì nó không phải là bản sao nhưng nó sử dụng cùng một địa chỉ bộ nhớ và giúp IDE của bạn xác định đối tượng để bạn có thể tự động hoàn thành.
biệt danh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.