使用R从WorldClim中提取数据?[关闭]


9

我有一个具有1000个不同纬度-经度的数据集。我希望针对这些坐标分别提取年平均气温和年降水量。这些数据可以很容易地从WorldClim获得并使用DIVA-GIS处理。

反正有在R上执行此操作吗?

我希望我的最终输出是一个数据帧,其中包含每个坐标的年温度和降水量。我是R中的GIS的新手,因此我寻求基本的代码块以及此输出所需的库。

Answers:


17

您可以使用raster软件包下载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.frame和,coordinates您将获得所需的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 Ash

因此,我points的数据集是经纬度和经度的数据框。然后,我完全按照您的方式运行。但是,当我运行时values,出现错误:not compatible with requested type。我还注意到,您points仅标记了样本的范围,但没有产生具有经度-纬度坐标的矢量
Ash

是的,小数位数。因为WorldClim的CRS是WGS 84纬度/经度(EPSG 4326)。您可以将坐标导入其他CRS中,并使用进行转换spTransform。如果在DDMMSS中有坐标,则将其转换为DD.MMM。其次,您撰写了有关不同坐标的文章,因此我将其解释为点,可以在同一模式下使用多边形。如果您的图层具有此信息,请使用shapefile它进行加载。
aldo_tapia

我不明白你的第二点。也许,我并没有清楚地解释。我在这里标记了错误:eval.in/733232
Ash Ash

喔好吧。spsample需要一个空间对象来设置样本边界。输入是网格,多边形或线。我所做的是使用WorlClim边界框设置样本范围。我这样做是为了在我的回答中举一个可重复的例子。在您的情况下,您无需使用spsample,就已经有要采样的坐标。
aldo_tapia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.