2014-11-05 2 views
10

у меня есть стек растровый, stk, состоящий из трех растровых изображений в R. Вот простой примерR: Написать RasterStack и сохранить имена слоев

# 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.

Спасибо, Кевин

+0

где вы читаете сложный файл tif? –

+0

Пауло, спасибо, что посмотрели. Я просто очистил пример, чтобы сделать его более понятным и исправленным некоторые формулировки. Я читаю в сложном файле tif, используя 'stk <- stack (" myStack.tif ")' (первая строка последнего блока кода). Еще раз спасибо. – kguay

ответ

5

Вы можете использовать родной растровый формат:

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

Формат сетки растра состоит из двоичного файла .gri и файл заголовка .grd. Это сохранит ваши имена. Обратите внимание, однако, что .gri двоичные файлы не сжимаются.

Если вам нужно открыть файлы растровых файлов в других программах, вам, скорее всего, понадобится написать дополнительный файл заголовка. Для этого я обычно использую формат заголовка ENVI.

hdr(myRaster, format = "ENVI") 

Чтобы открыть файл из QGIS, например, вы хотите выбрать .gri файл (двоичный) и он должен работать.

+0

Спасибо за этот ответ! Чтение растра обратно в R, имена слоев сохраняются. Однако QGIS не может отображать правильные имена слоев, хотя они правильно хранятся в файлах .grd и .hdr. Есть ли этому решение? –

4

Немного поздно, но может помочь кому-то еще ищет возможное решение:

writeRaster(stk, filename=names(stk), bylayer=TRUE,format="GTiff") 
+0

Это будет записывать каждый слой в отдельный файл, а не все слои и их имена в один стек в соответствии с вопросом OP. – shekeine

0

я написал мои файлы как 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" 
Смежные вопросы