web-dev-qa-db-ja.com

R:RasterStackを作成してレイヤー名を保持する

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形式に書き込んでみました。

おかげで、ケビン

18
kguay

ネイティブラスター形式を利用できます。

myRaster <- writeRaster(stk,"myStack.grd", format="raster")

ラスターグリッド形式は、バイナリ.griファイルと.grdヘッダーファイルで構成されます。これにより、レイヤー名が保持されます。ただし、.griバイナリファイルは圧縮されないことに注意してください。

他のプログラムでラスターgrdファイルを開く必要がある場合は、追加のヘッダーファイルを書き込む必要があります。私は通常、ENVIヘッダー形式を使用してそれを行います。

hdr(myRaster, format = "ENVI")

たとえば、qgisからファイルを開くには、.griファイル(バイナリー)を選択すると機能します。

10
bleutner

少し遅れますが、可能な解決策を探している誰かを助けるかもしれません:

writeRaster(stk, filename=names(stk), bylayer=TRUE,format="GTiff")
7
doncarlos

ファイルを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"
1
Iris