我正在使用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))
答案 0 :(得分:0)
我将使用CDO处理子集,然后使用包ncview来探索数据。
例如,您可以使用
提取子区域,例如Medcdo 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不是出版质量,但它可以让您有效地探索数据......