Python / GDALは離散値ラスターで一意の値を取得します


8

PythonとGDALを使用して、離散値ラスターの一意の値のリストを返す最も効率的な方法についてアドバイスをもらいたいと思います。

最もわかりやすい方法はラスターの属性テーブルを調べることだと思っていband.GetDefaultRAT()ましたが、属性テーブルを含むラスターデータセットのバンドで行うと(テーブルはArcCatalogに表示されます)、結果は常にNone次のようになります。

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

その場合、ラスターの各セルをスキャンして、一意の値のリストを手動で作成する必要があります。これが唯一の方法ですか?

または、PythonとGDALを使用して属性テーブルを作成し、一意の値のリストを照会する方法はありますか?


どのバージョンのGDALを使用していますか?
RK

愚かな質問ですが、RATとは何ですか?
ニックス

RATはRaster Attribute Tableの略です。
Markus M.

回答:


10

私が正しく理解していれば、numpy libのnp.unique関数を使用できます。

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)

または、あなたはそれをワンショットすることができます:

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

なぜラップband.ReadAsArray()np.array呼び出し?それはすでに派手な配列を返しませんか?
jpmc26 2018

1
はい、そうです。コピーではないため、np.arrayにラップしてもパフォーマンス上の問題はありませんが、同じメモリアドレスを使用し、IDEがオブジェクトを識別できるようにしてオートコンプリートを有効にします。
ニックス2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.