Rの3つのラスターイメージで構成されるラスタースタックstk
があります。これは簡単な例です
_# set up a raster stack with three layers
> library(raster)
> r <- raster(nrows=10,ncols=10)
> r[] <- rnorm(100)
> stk <- stack(r,r,r)
# layer names are set by default
> names(stk)
[1] "layer.1" "layer.2" "layer.3"
_
ラスターレイヤーに名前を割り当てます。
_# set layer names to "one", "two" and "three"
> names(stk) <- c('one','two','three')
> names(stk)
[1] "one" "two" "three"
_
以下を使用してRasterStackをGeoTiff(多層)に書き込む場合:
_writeRaster(stk,"myStack.tif", format="GTiff")
_
レイヤーの名前はファイル名に基づいて変更されます(以下の> names(stk)
を参照)。
ラスタースタックを読み取ったとき:
_> stk <- stack("myStack.tif")
# the layer names have been set automatically based on the filename
# they should be "one", "two" and "three"
> names(stk)
[1] "myStack.1" "myStack.2" "myStack.3"
_
RでRasterStackを書き込むときにレイヤー名を保持する方法を知っていますか?スタックをGeoTIFFおよびNetCDF形式に書き込んでみました。
おかげで、ケビン
ネイティブラスター形式を利用できます。
myRaster <- writeRaster(stk,"myStack.grd", format="raster")
ラスターグリッド形式は、バイナリ.griファイルと.grdヘッダーファイルで構成されます。これにより、レイヤー名が保持されます。ただし、.griバイナリファイルは圧縮されないことに注意してください。
他のプログラムでラスターgrdファイルを開く必要がある場合は、追加のヘッダーファイルを書き込む必要があります。私は通常、ENVIヘッダー形式を使用してそれを行います。
hdr(myRaster, format = "ENVI")
たとえば、qgisからファイルを開くには、.griファイル(バイナリー)を選択すると機能します。
少し遅れますが、可能な解決策を探している誰かを助けるかもしれません:
writeRaster(stk, filename=names(stk), bylayer=TRUE,format="GTiff")
ファイルをENVIファイルとして書き込み、ENVIヘッダーファイルのバンド名を変更しました。これで、ファイルをENVIおよびArcGisで開くことができ、レイヤー名が保持されます。
#write ENVI file (.envi; .hdr; .envi.aux.xml) with automatic layer names
writeRaster(stk, "myStack" , format="ENVI")
#change layer names in ENVI header (.hdr):
n="myStack.hdr"
x <- readLines(n)
x <- gsub("Band 1,", "one,", x)
x <- gsub("Band 2,", "two," , x)
x <- gsub("Band 3", "three", x)
cat(x, file=n, sep="\n") #overwrites the old ENVI header
/ edit .enviファイルをRにインポートすると、レイヤー名が再び削除されることに気づきました。 SAGAでも同じ問題。
image <- stack("myStack.envi")
names(image)
#[1] "myStack.1" "myStack.2" "myStack.3"
image = readGDAL("myStack.envi")
names(image)
#[1] "band1" "band2" "band3"