当我使用 worldclim 数据时,发生点 (gbif) 和地图不重合

The points of occurrence (gbif) and the maps don't coincide when i use worldclim data

我是 R 世界的新手,我正在尝试做一个物种分布模型,但是当我绘制我的结果时,这些点不在我的地图上,我试图改变 CRS 但我没有解决我的问题,现在我将向您展示我的代码

library(dismo)
library(raster)
library(dplyr)
library(rnaturalearth)

这里我从gbif下载了我的物种

gbif("Miniopterus", "schreibersii" , download=F)
minio<- gbif("Miniopterus", "schreibersii" , download=T) #you need 2 min approximately

我看到了记录的基础,然后我选择了2种不同的类型

table(minio$basisOfRecord)

#Filter data minio----

minio<- minio%>%
  filter(!is.na(lat))%>%
  filter(!is.na(lon))%>%
  filter(year>1980)%>%
  filter(basisOfRecord %in% c("HUMAN_OBSERVATION", "OBSERVATION"))

class(minio)
nrow(minio)

我只选择了经纬度

miniogeo<-minio%>%
  select(lon,lat)

head(miniogeo)
miniogeo$species<-1
head(miniogeo)
nrow(miniogeo)

然后我创建了坐标并设置了 crs

coordinates(miniogeo) <-c("lon","lat") 
crs(miniogeo) <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
proj4string(miniogeo) <- CRS("+init=epsg:4326")

这里开始出现问题,我尝试了很多类型的函数来创建地图,但这是最有效的(我发现的这些函数中最有效的)。我需要缩放西班牙和葡萄牙,我需要排除“非洲”。

Europe <- ne_countries(scale="medium", type="map_units", returnclass="sf", continent="Europe")
Worldclim<-raster::getData('worldclim', var='bio', res=2.5) 

Europe <- Europe %>%
  dplyr::select(geometry,name_long)  %>%    
  filter(name_long!='Russian Federation')

plot(Worldclim[[1]]) #or plot(worldclim$bio1)
plot(st_geometry(Europe))
points(miniogeo, cex=0.1)

envData<-crop(Worldclim, Europe)
EuropePred <- mask(envData, Europe) #we create a new raster without NA value 

我在这里绘制了我的点,但是,如你所见,我的点超出了我的地图

plot(EuropePred[[1]]) #example
points(miniogeo, cex=0.2)

然后我尝试放大到西班牙和葡萄牙。

extSpnPrt<-extent(c(-11,10,35,56))
miniogeo<-crop(miniogeo,extSpnPrt) 
SpainPort<-crop(EuropePred,extSpnPrt)

plot(SpainPort$bio2)
points(miniogeo, cex=0.1)

有人能理解我的问题吗?我真的很抱歉,我花了很多时间来更好地理解,但我的 R 水平目前还很基础。 我要感谢所有花时间阅读本文的人。希望你今天过得愉快

这是我的地图的结果,只有几何图形和 worldclim 数据 enter image description here

从您的 data.frame minio 创建 SpatialPointsDataFrame 的一种方法是:

coordinates(minio) <-  ~ lon + lat 
crs(minio) <- "+proj=longlat"

这是不正确的:

coordinates(minio) <- c("lon", "lat") 

结果:

plot(minio, cex=.5, col="red")
lines(as(Europe, "Spatial"))