CMIP5 미래 기후 데이터의 경도는 0 - 360도입니다. 래스터 패키지를 사용하여 -180 ~ 180도까지 변환하려면 어떻게해야합니까?경도를 0 - 360에서 -180 - 180으로 변환하는 방법
shift(r0,-180)
과 shift(r0,-360)
으로 시도했습니다. 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다. r0
여기 래스터입니다.
CMIP5 미래 기후 데이터의 경도는 0 - 360도입니다. 래스터 패키지를 사용하여 -180 ~ 180도까지 변환하려면 어떻게해야합니까?경도를 0 - 360에서 -180 - 180으로 변환하는 방법
shift(r0,-180)
과 shift(r0,-360)
으로 시도했습니다. 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다. r0
여기 래스터입니다.
이 rotate()
을 시도해보십시오 marmap
패키지는 당신을 위해 전환 등 뒷면을 할 수 있습니다. 그것의 도움말 페이지도 당신이 상대하고있는 데이터의 종류에 자사의 유틸리티를 언급 :
그것이 무엇을 보여줄 수있는 간단한 재현 예제 : 난 당신 downvote하지 않다가 회전 래스터 * -180과 180 사이의 표준 좌표로 360-0 에서 X 좌표 (경도)를 가지고 객체 도. 경도 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)
꽤 간단합니다
이ifelse(r0 > 180, -360 + r0, r0)
하지만, 179 및 181 원에서 2 개도 떨어져있는, 그래서 그들은 아마 179에 매핑해야하며, 변환 후 -179 나는 당신이'-360 + r0'을 원한다고 생각합니다. – Gregor
죄송합니다, r0이 래스터 파일이라는 사실을 잊어 버렸습니다. 그래서 ifelse 함수는이 경우 작동하지 않습니다. – user1617676
이 해킹의 일종 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)
1 + 정말 RTM이지만 때로는인지 작업이 재미 있습니다. 당신의 대답이 나타 났을 때 엄지와 검지 사이를 번갈아 가며 엄지 손가락과 집게 손가락을 잡고 있었고 반대편 "180"을 제대로 다시 가져 오는 데 어떤 종류의 재 매핑이 필요한지 정신적으로 알아 냈습니다. –
@BondedDust - 리 맵핑을 캡처하는 데 필요한 함수는'((long + 180) %% 360) -180 '이라고 생각합니다. 그 유일한 (궁극적으로 중요하지 않은) infelicity는 180에서 -180로 다시 매핑된다는 것입니다. –
오른쪽의 모듈러스 연산은 수학적 링을 정의합니다. –