Sử dụng R để trích xuất dữ liệu từ WorldClim? [đóng cửa]


9

Tôi có một bộ dữ liệu với 1000 vĩ độ - kinh độ khác nhau. Tôi muốn trích xuất nhiệt độ trung bình hàng năm và lượng mưa hàng năm cho mỗi tọa độ này. Những dữ liệu này có thể dễ dàng được lấy từ WorldClim và được xử lý bằng DIVA-GIS.

Có cách nào để làm điều này trên R?

Tôi muốn đầu ra cuối cùng của mình là một khung dữ liệu với nhiệt độ và lượng mưa hàng năm cho mỗi tọa độ. Tôi là người mới ở GIS trong R, vì vậy tôi tìm kiếm một đoạn mã cơ bản cùng với các thư viện cần thiết cho đầu ra này.

Câu trả lời:


16

Bạn có thể sử dụng rastergói để tải xuống dữ liệu WorldClim, xem ?getdatađể biết về độ phân giải, biến và tọa độ.

Ví dụ như:

library(raster)
library(sp)

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

Bio 1 và Bio12 có nghĩa là nhiệt độ trung bình và lượng mưa bất thường:

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

Tôi tạo các điểm ngẫu nhiên làm ví dụ, trong trường hợp của bạn sử dụng tọa độ để tạo một SpatialPointđối tượng.

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

Cuối cùng, sử dụng extract. Với cbind.data.framecoordinatesbạn sẽ nhận được dữ liệu mong muốn.frame.

values <- extract(r,points)

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

Tôi đã sử dụng điểm ngẫu nhiên, vì vậy tôi nhận được rất nhiều NA. Nó được mong đợi.

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)

nhập mô tả hình ảnh ở đây

Đừng quên rằng dữ liệu WorldClim có hệ số tỷ lệ là 10, Temp = -37-3,7 ºC.


Với ví dụ tọa độ:

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

Điều đó thực sự hữu ích!
Tro

Vì vậy, tôi có pointsmột khung dữ liệu của các lats và long của tập dữ liệu của tôi. Sau đó, tôi chạy chính xác như bạn đã làm. Tuy nhiên, khi tôi chạy, valuestôi gặp lỗi : not compatible with requested type. Tôi cũng nhận thấy rằng bạn pointschỉ đánh dấu phạm vi của mẫu, nhưng không tạo ra một vectơ có tọa độ dài
Ash

Có, số thập phân độ. Bởi vì CRS của WorldClim là WGS 84 lat / lon (EPSG 4326). Bạn có thể nhập tọa độ trong một CRS khác và chuyển đổi nó với spTransform. Nếu bạn có tọa độ trong DDMMSS, hãy chuyển đổi nó thành DD.MMM. Thứ hai, bạn đã viết về các tọa độ khác nhau, vì vậy tôi diễn giải nó như các điểm, bạn có thể sử dụng đa giác thay vì cùng một lược đồ. Nếu bạn có một lớp với thông tin này, sử dụng shapefileđể tải nó.
aldo_tapia

Tôi không nhận được điểm thứ hai của bạn. Có lẽ, tôi đã không giải thích rõ ràng. Tôi đã đánh dấu lỗi ở đây: eval.in/733232
Ash

À, được rồi spsampleyêu cầu một đối tượng không gian để đặt ranh giới mẫu. Đầu vào là lưới, đa giác hoặc đường. Những gì tôi đã làm là sử dụng hộp ranh giới WorlClim để đặt phạm vi mẫu. Tôi đã làm nó để làm một ví dụ tái tạo trong câu trả lời của tôi. Trong trường hợp của bạn, bạn không cần sử dụng spsample, bạn đã có tọa độ để lấy mẫu.
aldo_tapia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.