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