2016-03-29 4 views
0

Ich arbeite mit einer netCDF-Datei, die globale Meeresoberflächentemperatur Projektionen von Januar 2001 bis Dezember 2100 enthält, mit einer monatlichen Auflösung. Ich würde gerne in der Lage sein, eine SST-Karte für bestimmte Daten zu sehen, dh die SST-Projektionen für 2058 zu visualisieren. Allerdings kann ich an dieser Stelle nur eine endgültige Karte bekommen, von der ich annehme, dass sie die letzte ist Dezember 2100 Karte.Anzeigen bestimmter Daten in einer Zeitreihe von netCDF-Karten

Ich brauche keine monatliche Auflösung, also habe ich jeden 12-Monats-Abschnitt in einen Jahresdurchschnitt gemittelt. Ein Jahr Auflösung ist was ich will. Wie gesagt, ich möchte gerne ein bestimmtes Datum abrufen und die SST-Projektionen für dieses Datum visualisieren. Erstellen einer Animation wäre auch praktisch.

Das ultimative Ziel ist es, diese SST-Vorhersagen zu nutzen, um Lebensraumvorhersagen für Thunfische zu erstellen, die sich in einer anderen Kartenebene befinden. Grundsätzlich hat jede Zelle (0,5 ° x 0,5 °) eine Eignung für Thunfisch basierend auf SST, und diese Eignung wird sich ändern, wenn sich der SST ändert.

Ich bin nur an einem Teil des Mittelmeers interessiert, also habe ich die Zielfläche mit einem Raster festgelegt.

Ich bin ziemlich neu, also bin ich mir sicher, dass etwas in meinem Code fehlt. Ich bin mir nicht sicher, wie ich es angehen soll. Wenn mir jemand ein paar Hinweise geben könnte, wäre das sehr zu begrüßen. Auch wenn es ein völlig anderer Ansatz ist, verschiedene Pakete zu verwenden.

Pakete verwendet: 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

ich das 'raster' Paket mit empfehlen würde. Es kann 'netcdf' ohne so viele Schritte lesen, schreiben und plotten. – jsta

Antwort

0

ich das subsetting mit CDO umgehen würde und dann das Paket ncview die Daten erkunden nutzen.

Zum Beispiel können Sie einen Teilbereich wie die Med-Extrakt mit

cdo sellonlatbox,lon1,lon2,lat1,lat2 tos_O1.200101-210012.nc outfile.nc 

und zeigen Sie dann mit

ncview outfile.nc 

Sie können die Bilder mit den Pfeilen am oberen Rand des Fensters animieren.

Wenn Sie nur ein bestimmtes Jahr wünschen, können Sie dies mit der Funktion cdo seldate tun, vorausgesetzt, Ihre Daten sind korrekt definiert, oder Sie können auch Zeitschritte auswählen.

cdo seldate,DATE in.nc out.nc 

ncview ist nicht Publikationsqualität, sondern ermöglicht es Ihnen, die Daten effizient zu erkunden ...

Verwandte Themen