как конвертировать долготы от 0 - 360 в -180 - 180

долгота в будущих климатических данных CMIP5 находится в 0-360 градусов. Как преобразовать его в -180-180 градусов с помощью растрового пакета?

Я попытался с shift(r0,-180) и shift(r0,-360). Это не работает. Любая помощь будет оценена. r0 вот растр.

3 ответов


попробовать rotate(). На его странице справки даже упоминается его утилита с типом данных, с которыми вы имеете дело:

поворот растра * объекта с координатами x (долгота) от 0 к 360, к стандартным координатам между -180 и 180 градусами. Долгота от 0 до 360 часто используется в данных из global климатическая модель.

вот простой воспроизводимый пример, чтобы показать, что он делает:

library(raster)
r <- raster(matrix(1:100, ncol=10), 0, 360, -90, 90, crs="+proj=merc")
r2 <- rotate(r)
r2
# class       : RasterLayer 
# dimensions  : 10, 10, 100  (nrow, ncol, ncell)
# resolution  : 36, 18  (x, y)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=merc 
# data source : in memory
# names       : layer 
# values      : 1, 100  (min, max)

это своего рода Хак, и, вероятно, есть гораздо более простой способ сделать это в raster, но вот вариант. Сначала вам нужно создать матрицу из растрового объекта, затем изменить некоторые значения долготы (только те, которые > 180) и вернуться к растру. The marmap пакет может сделать взад и вперед переключение для вас:

# Switching from a raster to a matrix of class 'bathy'
library(marmap)
temp <- as.bathy(r0)
summary(temp)

# Changing the relevant longitude
names <- as.numeric(row.names(temp))
names[names > 180] <- names[names > 180] - 360

# Renaming the longitudes and switching back from a 'bathy' object to a raster
rownames(temp) <- names
r0.modified <- as.raster(temp)

Это довольно просто:

ifelse(r0 > 180, -360 + r0, r0)