Как изменить формат долготы в файле Netcdf в R?

У меня есть файл netcdf с тремя измерениями (время, долгота, широта):

3 измерения: время Размер: 14610 *** не ограничено *** time_origin: 31-DEC-1979: 18: 00: 00 long_name: t calendar: стандартные единицы: часы с 1979-01-01 00:00:00 lat Размер : 201 интервал между точками: четные единицы: северные градусы стандартное_имя: широта long_name: широта долгота Размер: 641 интервал между точками: четные единицы: градусы_ восток стандартное_имя: долгота long_name: долгота

Странно то, что долгота хранится от -80 до +80:

lon <- ncvar_get(nc_data,"lon")#[LonIdx]
head(lon)
-80.00 -79.75 -79.50 -79.25 -79.00 -78.75

tail(lon)
78.75 79.00 79.25 79.50 79.75 80.00

dim(lon)
641

Я хочу применить индекс долготы / широты для средней Европы, используя:

LonIdx <- c(which( nc_data$dim$lon$vals < -77.5) , which( nc_data$dim$lon$vals > 77.5) )
LatIdx <- which( nc_data$dim$lat$vals > 35 & nc_data$dim$lat$vals < 50)

lon <- ncvar_get(nc_data,"lon")[LonIdx]
nlon <- dim(lon)
head(lon)
-80.00 -79.75 -79.50 -79.25 -79.00 -78.75
tail(lon)
78.75 79.00 79.25 79.50 79.75 80.00
dim(lon)
[1] 20

пока все хорошо, но когда я хочу построить его с помощью графика уровня, результат испорчен, я предполагаю, потому что долгота сохраняется таким образом, а не от 0-360 (градусы восточной долготы)

grid <- expand.grid(lon=lon2, lat=lat2)

# Plots
# December, January, February
cutpts <- seq(
  min(dec_jan_feb_mat),round(max(dec_jan_feb_mat),1),length.out = 9)
plt1 <- levelplot(dec_jan_feb_mat ~ lon * lat, data=grid, at=cutpts, cuts=5, pretty=T, 
                  col.regions= c(brewer.pal(8,"YlGnBu")), margin=F,
                  main="1980-2019 (December, January, February) - Precipitation mean", xlab = "longitude", 
                  ylab = "latitude")
DJF_plot_precip <- plt1 + latticeExtra::layer(sp.lines(countries, col="black", 
                                                lwd=1.0))
DJF_plot_precip

Как мне соответствующим образом преобразовать долготу, чтобы я мог построить свои результаты?

С уважением


person Peter Pauker    schedule 29.06.2021    source источник


Ответы (1)


поскольку вы добавили тег cdo-climate, я предполагаю, что вас устраивает команда cdo для предварительной обработки файла до 0-360 от -180 до 180. Если да, то следующее поможет:

cdo sellonlatbox,0,360,-90,90 in.nc out.nc 

Альтернативные ответы см. в этом сообщении.

person Adrian Tompkins    schedule 29.06.2021
comment
Спасибо, Адриан. У вас есть идея, как это сделать в R? - person Peter Pauker; 29.06.2021