Rのランドサット8シーンを処理して、NDVIを計算し、ランドカバー分類アルゴリズムを実行します。 特に、ディスクにラスタスタックを書き込むときに、ラスタパッケージからのwriteRaster関数に問題があります。RでwriteRasterを使用してディスク上にラスタスタックを書き込むと、各レイヤの値の範囲が変更されます
私はlandsat 8シーンの12バンドの読み込みを開始し、それらをラスタスタックのレイヤーとしてスタックします。それらは16ビットイメージとして配信されるので、すべてのレイヤーの値の範囲は0から65535までです。ラスタースタックをディスクに書き込んだ後、R環境のディスクから新しく作成したファイルをリロードすると、すべてのレイヤーが元の値とは異なります。私は理由を理解できず、インターネット上で解決策を見つけることができませんでした。
これはコードである:
library(raster)
# Load the individual bands of the Landsat scene.
b01 <- raster(list.files(dirname, pattern = "B1.TIF", full.names = TRUE))
b02 <- raster(list.files(dirname, pattern = "B2.TIF", full.names = TRUE))
b03 <- raster(list.files(dirname, pattern = "B3.TIF", full.names = TRUE))
b04 <- raster(list.files(dirname, pattern = "B4.TIF", full.names = TRUE))
b05 <- raster(list.files(dirname, pattern = "B5.TIF", full.names = TRUE))
b06 <- raster(list.files(dirname, pattern = "B6.TIF", full.names = TRUE))
b07 <- raster(list.files(dirname, pattern = "B7.TIF", full.names = TRUE))
b08 <- raster(list.files(dirname, pattern = "B8.TIF", full.names = TRUE))
b09 <- raster(list.files(dirname, pattern = "B9.TIF", full.names = TRUE))
b10 <- raster(list.files(dirname, pattern = "B10.TIF", full.names = TRUE))
b11 <- raster(list.files(dirname, pattern = "B11.TIF", full.names = TRUE))
b12 <- raster(list.files(dirname, pattern = "BQA.TIF", full.names = TRUE))
# Since the band 8 has a 15m resolution, compared to 30m of all other bands, I
# need to resample it to match the other bands.
b08 <- resample(b08, b01)
allbands <- c(b01, b02, b03, b04, b05, b06, b07, b08, b09, b10, b11, b12)
rast.stack <- stack(allbands)
Iはrast.stackオブジェクトの特性をチェックすると、私はすべてのバンドの値に対する範囲が0であることを見ることができる - 私は書き込み、> 65535 次にディスク上のラスタスタック:
writeRaster(rast.stack, filename = "LT820103720161114.tif", overwrite = TRUE)
私はR環境では、この新しいファイルをロードし、
rast.stack <- stack("LT820103720161114.tif")
バンドの値の範囲は元のラスタスタックの値の範囲よりも小さくなります。 ファイルを.tif形式で元のラスター.grd形式で保存しようとしましたが、違いはありません。私はまた、次のようにdatatype引数でデータ型 を指定しようとしました:
writeRaster(rast.stack, filename = "LT820103720161114.tif", datatype = "INT2U", overwrite = TRUE)
私もwriteValues機能を使用してチャンクでディスク上のラスタを書き込もうとしました。いずれも問題を解決していません。誰が何が間違っているのか、これを修正する方法を知っていますか?このコードを実行する場合は、2016年11月14日に記録された037行のパス201のシーンをEarthExplorerで自由にダウンロードできます。 おかげ
マルチスペクトルGeoTiffをディスクに保存しますか?もしそうなら、 'writeRaster'のオプション引数は' options = "INTERLEAVE = BAND" 'でなければなりません。 – www
このオプションは、ファイルをディスクに書き込んだ後、レイヤーの値の範囲の変更の問題を解決していないようです。 –