2016-10-17 2 views
1

Мой вопрос основывается на более раннем сообщении How to extract data from a RasterBrick?. У меня есть несколько файлов netCDF с данными температуры в lat, long и depth для разных периодов времени (по 6 месяцев каждый). У меня также есть кадр данных с lat, долго и время, так как я хотел бы извлечь данные о поверхностных поверхностных данных из файлов netcdf. Прежде чем извлечь эти данные, я хотел бы преобразовать и объединить все файлы netcdf в один RaterBrick (который проще в использовании). Когда я использую цикл для «кирпича» и «слияния» файлов, он создает объект RasterLayer только с одним слоем вместо растрового кирпича, который я ожидал. Я ищу в Интернете, но пока не могу найти правильное решение этой проблемы.Как проложить несколько RasterBrick, чтобы создать один большой RasterBrick?

Я перестаю использовать петли, поэтому извините заранее, если я задаю вопрос с очень легким ответом, но я действительно мог бы использовать некоторые советы.

Вот что я сделал до сих пор:

Создать список файлов всех NetCDF файлов.

#Open all files, creats a list of 12 files 
    files= list.files('copernicus/daily_temp/',pattern='*.nc', full.names=TRUE) 

Попробуйте перебрать список файлов, чтобы создать кирпичи. Слейте эти многослойные кирпичи вместе, чтобы сформировать один большой RasterBrick с данными о температуре поверхности моря (уровень = 1) в день.

# Loop over files to creat a RasterBrick of temp at SST 
for(i in 1:length(files)) { 
    temp <- brick(files[i], varname="votemper",level=1) 
    temp.brick<-merge(temp)} 

# Look what one brick is build out of 
> temp 
class  : RasterBrick 
dimensions : 375, 297, 111375, 184 (nrow, ncol, ncell, nlayers) 
resolution : 0.11111, 0.06667 (x, y) 
extent  : -19.94444, 13.05523, 40.03333, 65.03459 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : C:\Users\PFA\Dropbox\HOM\copernicus\daily_temp\daily_temp_2003_2.nc 
names  : X2003.07.01, X2003.07.02, X2003.07.03, X2003.07.04, X2003.07.05, X2003.07.06, X2003.07.07, X2003.07.08, X2003.07.09, X2003.07.10, X2003.07.11, X2003.07.12, X2003.07.13, X2003.07.14, X2003.07.15, ... 
Date  : 2003-07-01, 2003-12-31 (min, max) 
varname  : votemper 
level  : 1 

    # Look at what the merged bricks are build out of 
class  : RasterLayer 
dimensions : 375, 297, 111375 (nrow, ncol, ncell) 
resolution : 0.11111, 0.06667 (x, y) 
extent  : -19.94444, 13.05523, 40.03333, 65.03459 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory 
names  : layer 
values  : 280.677, 297.669 (min, max) 

Любые советы или советы о том, как решить эту проблему, были бы очень признательны!

Спасибо, миллион!

+0

Что 'nlayers (темп)' сказать? –

+0

nlayers - 184 в этом случае. В файле количество слоев составляет 184 или 181, два файла - один год. – Elisah

+0

Я думаю, вам нужно предоставить два или более RasterBricks, чтобы фактически объединить их. Ваш код как есть, просто объединяет один объект, который может не делать то, что вы думаете. –

ответ

0

Вы можете попробовать создать первый кирпич вручную, а затем пропустить оставшуюся часть файлов, объединив их. Возможно, вам придется переключиться на работу с файлами на жестком диске, если это не подходит для вашей оперативной памяти. См. Последний пример ?merge, чтобы посмотреть, как это сделать.

tmp <- brick(files[1], ...) # create first brick 
for (i in 2:length(files)) { 
    newbrick <- brick(files[i], ...) # this will be the second file in first iteration 
    # on first iteration, it will merge file 1 and 2 
    # on second interation, merged file (1,2) and file 3 
    # on third iteration, merged file (1,2,3) and file 4 
    # ... 
    mergedbrick <- merge(tmp, newbrick) 

}

+0

Это работает очень хорошо. Благодаря! Однако есть небольшой недостаток. Он также изменяет имена слоев, что делает невозможным привязать уровни даты и времени к дате данных, которые я хотел бы получить для данных температуры. ('names: Sea.Water // perature.1, Sea.Water // perature.2, Sea.Water // perature.3, ....') Есть ли способ сохранить исходные имена слоев? – Elisah

+0

Простейшим способом было бы создать anarray исходных имен во время цикла (например, «растущий» атрибут, где в каждом цикле вы добавляете имена последнего файла). затем используйте это, чтобы заменить «неправильные» в конце цикла. – lbusett