为什么我不能使用 R 获得我所居住的州的 worldclim 数据(平均温度和预热)?

Why can I not get worldclim data (avg temp and prec) for the state which I live at all using R?

我想获取巴西塞阿拉州的平均气温和降水量;我在地图上做了一个裁剪区域:

我使用中心 lat/lon 作为 lat=-5.49839lon=-39.32062 我得到的纬度和经度的上限为 latinicial=-7.24614(最小纬度),latfinal=-3.76140(最大纬度),longinicial=-40.38084(最小经度)和longfinal=-38.77385(最大经度)然后我模拟了纬度和经度的均匀分布温度,位于最大值和最小值。

我的代码如下:

library(raster)
library(sp)
library(rgeos)
library(rgdal)
library(dismo)
library(rgdal)
library(sf)
d=getData('worldclim',lat=-5.49839,lon=-39.32062,res=0.5,var='bio')
latinicial=-7.24614
latfinal=-3.76140
longinicial=-40.38084
longfinal=-38.77385
latitude=runif(100,latinicial,latfinal)
longitude=runif(100,longinicial,longfinal)
coord=data.frame(latitude,longitude)
points = SpatialPoints(coord, proj4string = d@crs)
d <- d[[c(1,12)]]
names(d)=c("Temp","Prec")
extract(d,points)

但是当我 运行 它时,我得到了所有行的 NA 值,即使我只显示了 4 行:

所以,我想知道它发生了什么。为什么我得到 NA 值?

问题出在 coords 中的经纬度顺序。当您将 coords 放入 SpatialPoints 时,它期望顺序为 longitude 然后 latitude,但您将其颠倒过来。一旦你解决了这个问题,它就会正确地提取数据。 coord 上面的所有代码都可以正常工作。此外,如果您要多次 运行 这段代码,那么我建议使用 set.seed。这将允许您每次 运行 runif 语句时获得相同的值。

library(raster)
library(sp)

set.seed(243)
d = getData(
  'worldclim',
  lat = -5.49839,
  lon = -39.32062,
  res = 0.5,
  var = 'bio'
)
latinicial = -7.24614
latfinal = -3.76140
longinicial = -40.38084
longfinal = -38.77385
latitude = runif(100, latinicial, latfinal)
longitude = runif(100, longinicial, longfinal)
coord = data.frame(longitude, latitude)
points = SpatialPoints(coord, proj4string = d@crs)
d <- d[[c(1, 12)]]
names(d) = c("Temp", "Prec")
extract(d, coord)

输出

head()

       Temp Prec
  [1,]  239  655
  [2,]  267  832
  [3,]  256  541
  [4,]  269  740
  [5,]  242  784
  [6,]  233  981