当我使用 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"))
我是 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"))