以 NA 作为环境凸包外区域的光栅文件
Raster file with NAs as areas out of a environmental convex hull
求你R技能的支持。对于我的一篇论文,我正在使用遥感变量(LT 波段 3、4、5、7、DEM 和 NDVI)对亚马逊流域的树种分布进行建模,并且我计划屏蔽 "convex hull" 我的预测者。我查看了 R 中的几个包和函数(convhull、convhulln)但没有成功。
我提取了6000多个存在点的所有变量值。我需要对那组点做一个凸包,然后把它带到地理 space 上,然后把所有东西都屏蔽掉。所以基本上我需要一个带有 NAs 和 1s 的光栅文件(凸包外的 NAs 区域和凸包内的 1s 区域)
dbase <-read.csv("dbase.csv")
names(dbase)
# [1] "id" "pca" "block" "strip" "tree.n" "plaque"
# [7] "species" "diameter" "height" "volume" "x" "y"
# [13] "condition" "sector"
coordinates(dbase)<-~x+y
files <- list.files("C:/Users/...",
pattern="asc", full.names=TRUE )
predictors <-stack(files) # b3, b4, b5, b7, ndvi and dem
presence_var <-extract(predictors,dbase)
The predictor variables
# B3 B4 B5 B7 DEM ndvi
# [1,] 25 75 57 18 349 0.5000000
# [2,] 22 79 64 19 332 0.5643564
# [3,] 24 79 62 20 336 0.5339806
# [4,] 23 79 62 20 341 0.5490196
# [5,] 25 80 63 21 307 0.5238096
# [6,] 24 83 63 20 342 0.5514019
# ...
conhull <-convHull(presence_var)
pr <- predict(conhull, predictors)
plot(pr) # empty results
有什么建议吗?
我创建了一些示例数据来说明我认为适合您的方法:
library(raster)
library(tidyverse)
# an empty raster of global extent
r <- raster()
# make up some raster values
values(r) <- runif(length(r))
# make up some random coordinates around north america
coords <- cbind(
lon = runif(100, min = -120, max = -60),
lat = runif(100, min = 30, max = 50))
# let's have a look
plot(r)
points(coords, add = TRUE)
下面我用示例数据来
- 确定构成凸包的点
- 创建一个凸包
SpatialPolygon
- 屏蔽栅格,以便只保留截取凸包的像元
# get the convex hull
hull_points <- coords[chull(coords),]
# convert to polygon
hull_polygon <- hull_points %>%
Polygon() %>%
list() %>%
Polygons(1) %>%
list() %>%
SpatialPolygons()
# mask the raster
rr <- mask(r, hull_polygon)
# let's have another look
plot(rr)
附带说明:如果我正确理解您要执行的操作,我建议您在进行遮罩之前在空间多边形周围添加一个缓冲区。这是因为最有可能的栖息地适宜性高的区域就在您的边缘事件旁边但在凸包之外,您应该小心剪掉这些区域。
求你R技能的支持。对于我的一篇论文,我正在使用遥感变量(LT 波段 3、4、5、7、DEM 和 NDVI)对亚马逊流域的树种分布进行建模,并且我计划屏蔽 "convex hull" 我的预测者。我查看了 R 中的几个包和函数(convhull、convhulln)但没有成功。
我提取了6000多个存在点的所有变量值。我需要对那组点做一个凸包,然后把它带到地理 space 上,然后把所有东西都屏蔽掉。所以基本上我需要一个带有 NAs 和 1s 的光栅文件(凸包外的 NAs 区域和凸包内的 1s 区域)
dbase <-read.csv("dbase.csv")
names(dbase)
# [1] "id" "pca" "block" "strip" "tree.n" "plaque"
# [7] "species" "diameter" "height" "volume" "x" "y"
# [13] "condition" "sector"
coordinates(dbase)<-~x+y
files <- list.files("C:/Users/...",
pattern="asc", full.names=TRUE )
predictors <-stack(files) # b3, b4, b5, b7, ndvi and dem
presence_var <-extract(predictors,dbase)
The predictor variables
# B3 B4 B5 B7 DEM ndvi
# [1,] 25 75 57 18 349 0.5000000
# [2,] 22 79 64 19 332 0.5643564
# [3,] 24 79 62 20 336 0.5339806
# [4,] 23 79 62 20 341 0.5490196
# [5,] 25 80 63 21 307 0.5238096
# [6,] 24 83 63 20 342 0.5514019
# ...
conhull <-convHull(presence_var)
pr <- predict(conhull, predictors)
plot(pr) # empty results
有什么建议吗?
我创建了一些示例数据来说明我认为适合您的方法:
library(raster)
library(tidyverse)
# an empty raster of global extent
r <- raster()
# make up some raster values
values(r) <- runif(length(r))
# make up some random coordinates around north america
coords <- cbind(
lon = runif(100, min = -120, max = -60),
lat = runif(100, min = 30, max = 50))
# let's have a look
plot(r)
points(coords, add = TRUE)
下面我用示例数据来
- 确定构成凸包的点
- 创建一个凸包
SpatialPolygon
- 屏蔽栅格,以便只保留截取凸包的像元
# get the convex hull
hull_points <- coords[chull(coords),]
# convert to polygon
hull_polygon <- hull_points %>%
Polygon() %>%
list() %>%
Polygons(1) %>%
list() %>%
SpatialPolygons()
# mask the raster
rr <- mask(r, hull_polygon)
# let's have another look
plot(rr)
附带说明:如果我正确理解您要执行的操作,我建议您在进行遮罩之前在空间多边形周围添加一个缓冲区。这是因为最有可能的栖息地适宜性高的区域就在您的边缘事件旁边但在凸包之外,您应该小心剪掉这些区域。