查看netCDF地图的时间序列中的特定日期

时间:2016-03-29 13:34:39

标签: netcdf noaa

我正在使用netCDF文件,该文件包含2001年1月至2100年12月的全球海面温度预测,每月分辨率。我希望能够查看特定日期的SST地图,即可视化2058年的SST预测。但是,此时我能够获得的是最终地图,我假设它是最后一帧,即2100年12月的地图。

我不需要每月解决,所以我将每个12个月的部分平均为年平均值。一年的决议是我想要的。正如我所说,我希望能够召集一个特定日期,并可视化该日期的SST预测。创建动画也很方便。

最终目标是使用这些SST预测来推动金枪鱼的栖息地预测,这将在另一个地图层中。基本上,每个细胞(0.5°x 0.5°)将根据SST对金枪鱼具有适合性等级,并且随着SST的变化,适应性将发生变化。

我只对地中海的某个区域感兴趣,所以我使用网格将目标区域设置为该区域。

我对此很陌生,所以我确信我的代码中缺少一些根本性的东西。我只是不确定如何处理它。如果有人能给我一些指示,那就非常感激了。即使这是一种完全不同的方法,使用不同的包。

使用的套餐:RNetCDF

    grid <- GridTopology(c(-6.5,30), c(0.5,0.5), c(60,32))

NOAAsst <- open.nc("C:/Users/hayde/Desktop/Final Modelling Project/tos_O1.200101-210012.nc")
print.nc(NOAAsst)
dat<-read.nc(NOAAsst)
sst<-dat$tos
lat<-dat$lat
long<-dat$lon
close.nc(NOAAsst)

latx  <- rep(lat,length(long))
longx <- rep(long, length(lat))
longx <- as.vector(t(matrix(longx,nrow=length(long))))
sst <- data.frame(var  = as.vector(t(apply(sst,c(1,2),"mean"))))
map <- SpatialPointsDataFrame(cbind(longx,latx), sst, proj4string = CRS("+proj=merc +datum=WGS84"))

############  Plotting the image  ###############

sst <- data.frame(temperature = rep(NA,length(coordinates(grid)[,1])))
grid <- SpatialGridDataFrame(grid, sst, proj4string = CRS("+proj=merc +datum=WGS84"))
GridPoints<- coordinates(grid)
MapPoints <- coordinates(map)
for(i in 1:dim(GridPoints)[1]) {
  distance <- spDistsN1(MapPoints, GridPoints[i,], longlat = TRUE)
  grid$temperature[i] <- map$var[which.min(distance)]
}
spplot(grid, scales=list(draw=T))

1 个答案:

答案 0 :(得分:0)

我将使用CDO处理子集,然后使用包ncview来探索数据。

例如,您可以使用

提取子区域,例如Med
cdo sellonlatbox,lon1,lon2,lat1,lat2 tos_O1.200101-210012.nc outfile.nc

然后用

查看
ncview outfile.nc

您可以使用窗口顶部的箭头为图像设置动画。

如果您只想要特定的年份,那么您可以使用cdo seldate函数执行此操作,假设您的日期定义正确,或者您也可以选择时间步长。

cdo seldate,DATE in.nc out.nc

ncview不是出版质量,但它可以让您有效地探索数据......