-1

我正在使用一个 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))
4

1 回答 1

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 不是出版质量,但它可以让您有效地探索数据......

于 2017-01-18T11:18:05.013 回答