为什么我不能使用 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.49839
和 lon=-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
我想获取巴西塞阿拉州的平均气温和降水量;我在地图上做了一个裁剪区域:
我使用中心 lat/lon 作为 lat=-5.49839
和 lon=-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