我已经在当前条件下以及未来气候变化情景下为多个物种运行 Maxent。我正在使用nicheOverlap 函数和Schoener 的D 统计量来量化当前和未来合适栖息地之间的变化。在我的研究中,有相当多的生物只是在山上移动得更远,所以有很多重叠,因为未来的分布在目前的分布之内(只是在高海拔地区占据更少的区域)。通过查看 QGIS 中的 ascii 文件,我可以看到未来在面积方面不太适合栖息地,所以我想对此进行量化。我已经在互联网上搜索了一种计算栅格面积的好方法,但从未找到任何完全适合我的想法的东西。因此,我写了一些融合各种脚本的点点滴滴的东西。它粘贴在下面。
两个问题:1)你们都同意这正在做我认为它正在做的事情(以平方公里计算面积)吗?2)有没有办法简化这个?具体来说,您会看到我从栅格转到数据框再回到栅格?也许我可以留在光栅中?
感谢您的任何意见!
丽贝卡
####
library(raster)
#load rasters
m <- raster("SpeciesA_avg.asc")
mf <- raster("SpeciesA_future_layers_avg.asc")
#change to dataframe
m.df <- as.data.frame(m, xy=TRUE)
#get rid of NAs
m.df1 <- na.omit(m.df)
#keep only cells that that have a suitability score above 0.5 (scores range from 0 to 1)
m.df2 <- m.df1[m.df1$SpeciesA_avg> 0.5,]
#re-rasterize just the suitable area
m.raster <- rasterFromXYZ(m.df2)
##same as above but for future projection
mf.df <- as.data.frame(mf, xy=TRUE)
mf.df1 <- na.omit(mf.df)
mf.df2 <- mf.df1[mf.df1$SpeciesA_future_layers_avg>0.5,]
mf.raster <-rasterFromXYZ(mf.df2)
#get sizes of all cells in current distribution raster
#note my original layers were 30 seconds or 1 km2.
cell_size<-area(m.raster, na.rm=TRUE, weights=FALSE)
#delete NAs from all raster cells. It looks like these come back when switching from dataframe to raster
cell_size1<-cell_size[!is.na(cell_size)]
#compute area [km2] of all cells in raster
raster_area_present<-length(cell_size1)*median(cell_size1)
raster_area_present
#get sizes of all cells in future raster [km2]
cell_size<-area(mf.raster, na.rm=TRUE, weights=FALSE)
#delete NAs from vector of all raster cells
cell_size1<-cell_size[!is.na(cell_size)]
#compute area [km2] of all cells in geo_raster
raster_area_future<-length(cell_size1)*median(cell_size1)
raster_area_future
##calculate change in area
dif_area <- raster_area_present - raster_area_future
dif_area