Я работаю с файлом netCDF, который содержит глобальные прогнозы температуры поверхности моря с января 2001 года по декабрь 2100 года с ежемесячным разрешением. Я хотел бы иметь возможность просматривать карту SST для конкретных дат, то есть визуализировать прогнозы SST для 2058. Однако все, что я могу получить в этот момент, - это окончательная карта, которую я предполагаю, это последний кадр, то есть Карта декабря 2100 года.Просмотр конкретных дат во временном ряду netCDF-карт
Мне не требуется ежемесячное разрешение, поэтому я усреднял каждый 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))
Я бы рекомендовал использовать в 'raster' пакет. Он может читать, писать и писать 'netcdf' без так много шагов. – jsta