2014-09-08 3 views
6

CMIP5 미래 기후 데이터의 경도는 0 - 360도입니다. 래스터 패키지를 사용하여 -180 ~ 180도까지 변환하려면 어떻게해야합니까?경도를 0 - 360에서 -180 - 180으로 변환하는 방법

shift(r0,-180)shift(r0,-360)으로 시도했습니다. 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다. r0 여기 래스터입니다.

답변

11

rotate()을 시도해보십시오 marmap 패키지는 당신을 위해 전환 등 뒷면을 할 수 있습니다. 그것의 도움말 페이지도 당신이 상대하고있는 데이터의 종류에 자사의 유틸리티를 언급 :

가 회전 래스터 * -180과 180 사이의 표준 좌표로 360-0 에서 X 좌표 (경도)를 가지고 객체 도. 경도 0 ~ 360은 기후 모델 의 글로벌 데이터에서 자주 사용됩니다. 여기

그것이 무엇을 보여줄 수있는 간단한 재현 예제 : 난 당신 downvote하지 않다

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 + 정말 RTM이지만 때로는인지 작업이 재미 있습니다. 당신의 대답이 나타 났을 때 엄지와 검지 사이를 번갈아 가며 엄지 손가락과 집게 손가락을 잡고 있었고 반대편 "180"을 제대로 다시 가져 오는 데 어떤 종류의 재 매핑이 필요한지 정신적으로 알아 냈습니다. –

+0

@BondedDust - 리 맵핑을 캡처하는 데 필요한 함수는'((long + 180) %% 360) -180 '이라고 생각합니다. 그 유일한 (궁극적으로 중요하지 않은) infelicity는 180에서 -180로 다시 매핑된다는 것입니다. –

+0

오른쪽의 모듈러스 연산은 수학적 링을 정의합니다. –

0

꽤 간단합니다

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

하지만, 179 및 181 원에서 2 개도 떨어져있는, 그래서 그들은 아마 179에 매핑해야하며, 변환 후 -179 나는 당신이'-360 + r0'을 원한다고 생각합니다. – Gregor

+0

죄송합니다, r0이 래스터 파일이라는 사실을 잊어 버렸습니다. 그래서 ifelse 함수는이 경우 작동하지 않습니다. – user1617676

1

이 해킹의 일종 raster에 해당 할 수있는 더 쉬운 방법이 거기에 아마, 그러나 여기 옵션입니다. 먼저 래스터 객체에서 행렬을 생성 한 다음 경도 값 (180보다 큰 값)을 수정하고 래스터로 다시 전환해야합니다.

# 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)