R: Записать RasterStack и сохранить имена слоев
У меня есть растровый стек stk
, состоящий из трех растровых изображений в R. Вот простой пример
# 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"
Знаете ли вы, как сохранить имена слоев при записи RasterStacks в R? Я попытался записать стек в форматы GeoTIFF и NetCDF.
Спасибо, Кевин
Ответы
Ответ 1
Вы можете использовать собственный растровый формат:
myRaster <- writeRaster(stk,"myStack.grd", format="raster")
Формат растровой сетки состоит из двоичного файла .gri и файла заголовка .grd. Это сохранит ваши имена. Обратите внимание, однако, что .gri двоичные файлы не сжимаются.
Если вам нужно открыть файлы растровых файлов grd в других программах, вам, скорее всего, понадобится написать дополнительный файл заголовка. Для этого я обычно использую формат заголовка ENVI.
hdr(myRaster, format = "ENVI")
Чтобы открыть файл из qgis, например, вы должны выбрать файл .gri(двоичный файл), и он должен работать.
Ответ 2
Немного поздно, но может помочь кому-то еще найти возможное решение:
writeRaster(stk, filename=names(stk), bylayer=TRUE,format="GTiff")
Ответ 3
Я написал свои файлы как файлы 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
/редактировать
Я только заметил, что когда файл .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"