簡體   English   中英

如何循環遍歷多個RasterBrick來創建一個大型RasterBrick?

[英]How to loop through multiple RasterBrick to create one large RasterBrick?

我的問題進一步建立在早期文章如何從RasterBrick中提取數據? 我有多個netCDF文件,溫度數據為緯度,長度和深度,分別為不同的時間段(每個6個月)。 我也有一個lat,long和time的數據框,我想從netcdf文件中提取海面臨時數據。 在我提取這些數據之前,我想將所有netcdf文件轉換並合並到一個RaterBrick(這更容易使用)。 當我使用循環“磚塊”並“合並”文件時,它會創建一個RasterLayer對象,只有一層而不是我期待的柵格磚。 我已經搜索了互聯網,但到目前為止,我找不到適合這個問題的解決方案。

我已經不再使用循環,所以如果我問一個非常容易回答的問題,我會提前抱歉,但我真的可以使用一些建議。

這是我到目前為止所做的:

創建所有netcdf文件的文件列表。

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

嘗試遍歷文件列表以創建磚塊。 將這些多層磚合並在一起,形成一個每天具有海面(水平= 1)溫度數據的大型RasterBrick。

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

您可以嘗試手動創建第一塊磚,然后循環其余文件,合並它們。 如果這不適合您的RAM,您可能需要切換到使用硬盤驅動器上的文件。 請參閱last ?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) 

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM