首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将经度从0- 360转换为-180 - 180

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

Stack Overflow用户
提问于 2014-09-09 02:17:58
回答 3查看 11.4K关注 0票数 8

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

我试过用shift(r0,-180)shift(r0,-360)。它不起作用。任何帮助都将不胜感激。这里的r0是一个栅格。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-09 03:37:47

试试rotate()。它的帮助页面甚至提到了它对您正在处理的数据类型的实用程序:

将x坐标(经度)为0到360的光栅*对象旋转到-180度到180度之间的标准坐标。在全球气候模型的数据中,经常使用0到360之间的经度。

下面是一个简单的可重现的例子来说明它的作用:

代码语言:javascript
运行
复制
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)
票数 17
EN

Stack Overflow用户

发布于 2014-09-09 02:19:52

这很简单:

代码语言:javascript
运行
复制
ifelse(r0 > 180, -360 + r0, r0)
票数 3
EN

Stack Overflow用户

发布于 2014-09-09 03:10:17

这是一种技巧,在raster中可能有一种更简单的方法来实现,但这里有一个选择。首先,您需要从您的栅格对象创建一个矩阵,然后修改一些经度值(仅那些大于180的值),并切换回栅格。marmap包可以为您进行来回切换:

代码语言:javascript
运行
复制
# 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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25730625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档