如何将经度从0 - 360转换为-180 - 180

时间:2014-09-08 18:17:58

标签: r raster

CMIP5未来气候数据的经度为0 - 360度。如何使用光栅包将其转换为-180 - 180度?

我尝试使用shift(r0,-180)shift(r0,-360)。这是行不通的。任何帮助将不胜感激。 r0这是一个栅格。

3 个答案:

答案 0 :(得分:12)

试试rotate()。它的帮助页面甚至提到了它与你正在处理的数据类型的效用:

  

从0开始旋转x坐标(经度)的Raster *对象   360到-180到180度之间的标准坐标。   经常在全球数据中使用0到360之间的经度   气候模型。

这是一个简单的可重现的例子来展示它的作用:

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)

答案 1 :(得分:1)

这是一种黑客行为,在raster中可能有更简单的方法,但这里有一个选项。首先,您需要从栅格对象创建矩阵,然后修改一些经度值(仅限> 180的经度值)并切换回栅格。 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)

答案 2 :(得分:0)

这很简单:

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