2016-03-29 3 views
0

Я работаю с файлом 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)) 
+0

Я бы рекомендовал использовать в 'raster' пакет. Он может читать, писать и писать 'netcdf' без так много шагов. – jsta

ответ

0

Я бы справиться с CDO Подменю, а затем использовать пакет ncview для изучения данных.

Например, вы можете извлечь подобласть, такие как мед с

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 не качество публикации, но это позволяет эффективно исследовать данные ...

Смежные вопросы