2016-10-17 1 views
1

Ma question se base plus loin sur un article précédent How to extract data from a RasterBrick?. J'ai plusieurs fichiers netCDF avec des données de température à lat, long et depth pour différentes périodes (6 mois chacun). J'ai aussi une trame de données avec lat, long et temps pour, je voudrais extraire les données de température de surface de la mer sur les fichiers netcdf. Avant d'extraire ces données je voudrais convertir et fusionner tous les fichiers netcdf à un RaterBrick (qui est plus facile à utiliser). Lorsque j'utilise une boucle pour «brique» et «fusionner» les fichiers, il crée un objet RasterLayer avec un seul calque à la place de la brique raster que j'attendais. J'ai cherché sur Internet mais jusqu'à présent, je ne peux pas trouver la bonne solution pour ce problème.Comment faire une boucle sur plusieurs RasterBrick pour créer un grand RasterBrick?

Je suis nouveau à l'utilisation des boucles, donc je suis désolé à l'avance si je pose une question avec une réponse vraiment facile mais je pourrais vraiment utiliser quelques conseils.

Voici ce que je l'ai fait jusqu'à présent:

Créer une liste de fichiers de tous les fichiers netcdf.

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

Essayez de faire une boucle sur la liste de fichiers pour créer des briques. Fusionner ces briques multicouches ensemble pour former un grand RasterBrick avec des données de température de surface de la mer (niveau = 1) par jour.

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

Des conseils ou des conseils sur la façon de résoudre ce ce soit serait très apprécié!

Merci mille fois!

+0

Que signifie 'nLayers (temp)' dire? –

+0

nlayers est de 184 dans ce cas. Par fichier, le nombre de couches est 184 ou 181, deux fichiers font un an. – Elisah

+0

Je pense que vous devrez fournir deux ou plusieurs RasterBricks pour les fusionner. Votre code tel qu'il est, fusionne juste un objet, ce qui peut ne pas faire ce que vous pensez qu'il fait. –

Répondre

0

Vous pourriez essayer de créer la première brique à la main, puis faire une boucle dans le reste des fichiers, en les fusionnant. Vous devrez peut-être passer à travailler avec des fichiers sur le disque dur si cela ne rentre pas dans votre RAM. Voir dernier ?merge exemple pour voir comment faire cela.

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

Cela fonctionne très bien. Merci! Cependant, il y a un petit inconvénient. Il modifie également les noms des calques, ce qui rend presque impossible de lier les calques date/heure à la date de la base de données pour laquelle j'aimerais obtenir les données de température. ('noms: Sea.Water // perature.1, Sea.Water // perature.2, Sea.Water // perature.3, ....') Est-il possible de conserver les noms des calques d'origine? – Elisah

+0

façon la plus simple serait de créer un tableau de noms originaux tout en faisant une boucle (par exemple, un "croissant" Arrear où à chaque cycle, vous ajoutez les noms du dernier fichier). utilisez-le ensuite pour remplacer les «mauvais» à la fin du cycle. – lbusett