R을 사용하여 WorldClim에서 데이터를 추출 하시겠습니까? [닫은]


9

위도 경도가 1000 개인 데이터 세트가 있습니다. 이 좌표 각각에 대한 평균 연간 온도와 연간 강수량을 추출하고 싶습니다. 이러한 데이터는 WorldClim 에서 쉽게 구할 수 있으며 DIVA-GIS를 사용하여 처리 할 수 있습니다 .

어쨌든 R에서 이것을 할 수 있습니까?

최종 출력이 각 좌표의 연간 온도 및 강수량이있는 데이터 프레임이되기를 원합니다. 저는 R의 GIS에 처음 왔으므로이 출력에 필요한 라이브러리와 함께 기본 코드 청크를 찾습니다.

답변:


17

rasterpackage를 사용 하여 WorldClim 데이터를 다운로드 ?getdata하고 해상도, 변수 및 좌표에 대해 알 수 있습니다 .

예를 들어 :

library(raster)
library(sp)

r <- getData("worldclim",var="bio",res=10)

Bio 1과 Bio12 는 평균 기온과 연간 강수량입니다.

r <- r[[c(1,12)]]
names(r) <- c("Temp","Prec")

예를 들어 임의의 점을 만듭니다 SpatialPoint. 귀하의 경우 좌표를 사용하여 객체 를 만듭니다 .

points <- spsample(as(r@extent, 'SpatialPolygons'),n=100, type="random")    

마지막으로을 사용하십시오 extract. 로 cbind.data.framecoordinates당신은 욕망 data.frame을 얻을 것이다.

values <- extract(r,points)

df <- cbind.data.frame(coordinates(points),values)

나는 임의의 포인트를 사용했기 때문에 많은 것을 얻었습니다 NA. 예상됩니다.

head(df)
           x          y Temp Prec
1  112.95985  52.092650  -37  388
2  163.54612  85.281643   NA   NA
3   30.95257   5.932434  270  950
4   64.66979  40.912583  150  150
5 -169.40479 -58.889104   NA   NA
6   51.46045  54.813600   36  549

plot(r[[1]])
plot(points,add=T)

여기에 이미지 설명을 입력하십시오

WorldClim 데이터의 스케일 팩터는 10이므로 Temp = -37-3.7ºC입니다.


좌표 예 :

library(raster)
library(sp)

r <- getData("worldclim",var="bio",res=10)

r <- r[[c(1,12)]]
names(r) <- c("Temp","Prec")

lats <- c(9.093028 , 9.396111, 9.161417)
lons <- c(-11.7235, -11.72975, -11.709417) 

coords <- data.frame(x=lons,y=lats)

points <- SpatialPoints(coords, proj4string = r@crs)

values <- extract(r,points)

df <- cbind.data.frame(coordinates(points),values)

df
          x        y Temp Prec
1 -11.72350 9.093028  257 2752
2 -11.72975 9.396111  257 2377
3 -11.70942 9.161417  257 2752

정말 도움이되었습니다!
Ash

그래서, 나는 points데이터 세트의 위도와 경도의 데이터 프레임입니다. 그런 다음 나는 당신이했던 방식으로 정확하게 실행합니다. 그러나 실행할 때 values오류가 발생 not compatible with requested type합니다. 또한 points샘플의 범위를 표시하지만 위도 좌표가있는 벡터를 생성하지는 않습니다.
Ash

예, 소수 자릿수입니다. WorldClim의 CRS는 WGS 84lat / lon (EPSG 4326)이므로 다른 CRS에서 좌표를 가져 와서로 변환 할 수 있습니다 spTransform. DDMMSS에 좌표가 있으면 DD.MMM으로 변환하십시오. 둘째, 다른 좌표에 대해 썼으므로 포인트로 해석하므로 동일한 스키마 대신 다각형을 사용할 수 있습니다. 이 정보가있는 레이어가 있으면이를 사용 shapefile하여로드하십시오.
aldo_tapia

나는 당신의 두 번째 요점을 얻지 못합니다. 아마도 나는 명확하게 설명하지 않았다. 나는 여기에 오류를 표시했다 : eval.in/733232
Ash

그래. spsample샘플 경계를 설정하려면 공간 객체가 필요합니다. 입력은 격자, 다각형 또는 선입니다. 내가 한 것은 WorlClim 경계 상자를 사용하여 샘플 범위를 설정하는 것이 었습니다. 나는 내 대답에서 재현 가능한 예를 만들기 위해 그것을했다. 귀하의 경우을 사용할 필요가 없으며 spsample이미 샘플링 할 좌표가 있습니다.
aldo_tapia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.