我正在尝试从多变量 netcdf 文件中提取一个变量,然后创建一个用于操作的光栅砖。我已经阅读了很多关于此过程的帖子,但找不到可行的解决方案,希望这篇文章也能对其他人有所帮助。下面的代码中使用了库 netcdf4 和栅格。
Here is a hyperlink 到 netcdf 文件“test.nc”。
该文件包含一套用于珊瑚礁研究的 SST 产品(即多变量)。在这里,我选择一个作为示例并说明问题。首先,我将工作目录设置为 .nc 文件所在的位置,然后尝试一种不起作用的简单方法。
方法一:
b<-brick('test.nc')
这是警告信息: 警告信息:
在 .varName(nc, varname, warn = warn) 中:使用的 varname 是:CRW_BAA 如果这不正确,您可以将其设置为以下之一:CRW_BAA、CRW_BAA_mask、CRW_BAA_7D_MAX、CRW_BAA_7D_MAX_mask、CRW_DHW、CRW_DHW_mask、CRW_HOTSPOT、CRW_HOTSPOT_mask、CRW_SEAICE、CRW_SRW_STAW_MASK
默认情况下,第一个变量用于创建我的光栅砖,但我想从不同的变量创建砖。所以,我接下来做了:
DHW <- ncvar_get(nc_data, "CRW_DHW")
b<-brick(DHW)
dim(b)
返回具有适当维度的不同变量。所以,到目前为止一切都很好,但我的问题来了。我想取每个像素的平均值,然后使用包栅格创建一个简单的图。
map<-calc(b, fun=mean) # takes the average for each pixel through my timestamps
plot(test) # a simple plot
图片看起来都不错,但我丢失了纬度和经度各 1 度。相反,该图显示每个轴的正确距离为 1,但没有真正的空间参考。
这让我尝试了方法 2: 在这里,我提取了所有单独的变量并尝试创建一个新栅格。
nc_data <- nc_open('test.nc') # open netcdf file
lat <- ncvar_get(nc_data, "latitude") # extract
lon <- ncvar_get(nc_data, "longitude") # extract
time <- ncvar_get(nc_data, "time") # extract
time<-as.POSIXct(as.numeric(as.character(time)),origin="1970-01-01",tz="GMT") # set time zone
DHW <- ncvar_get(nc_data, "CRW_DHW") # finally extract my variable of interest
现在,我最终想用这些提取物创建一个新的光栅砖,并在许多帖子中找到了很多不同的指导,不幸的是没有一个对我有用。
非常感谢有关以最简单的方式切换 netcdf 变量并创建具有适当空间参考的操作的新光栅砖的任何指导。