我仍在询问this question的同一项目中工作。
没问题,但是我的处理时间太长了,对于每个NetCDF文件,我正在读取它,从多个时间片中获取堆栈,然后使用r裁剪每个时间片。像下面这样的代码:
library(raster)
library(ncdf4)
library(ncdf4.helpers)
library(rworldxtra)
data("countriesHigh")
我拥有的NETCdf文件适用于世界各地,但是我仅使用南美,因为我使用了 rworldxtra 包中的 countiresHigh 来对其进行子集化:
NONA <- countriesHigh[!is.na(countriesHigh@data$GEO3),]
## get shapefile of South America
SA <- NONA[NONA@data$GEO3 == "South America",]
然后使用以下代码来裁剪所需的每一层。
##Open conection to the layer
nc <- nc_open("C:/Users/mean_temperature-15000BP-10000BP.nc")
现在我开始循环
for(i in 1:10){
message(paste("reading layer", i))
# Read the stack for year i
r <- stack("C:/Users/mean_temperaturemean_temperature-15000BP-10000BP.nc", varname = age[i])
#Change the extent to the correct one
extent(r) <- c(-180,180,-90,90)
#Crop it to South America
r <- crop(r, SA)
gc()
}
如this question中所述,地图的定义范围不是最常用的,但我将裁剪的范围基于一个具有更典型c(-180,180,-90,90)
范围的shapefile范围。 >