我要求你的R技能支持。对于我的一篇论文,我正在使用遥感变量(LT波段3,4,5,7,DEM和NDVI)对亚马逊地区的树种分布进行建模,我计划将所有地点掩盖在“凸面”之外。船体“我的预测者。我已经回顾了R(convhull,convhulln)中的几个包和函数,但没有成功。
我已经提取了超过6000个存在点的所有变量值。我需要对这组点进行凸包,然后将其带到地理空间然后将所有内容掩盖掉。所以基本上我需要一个带有NA和1s的光栅文件(凸壳中的NA区域和凸壳内的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)
# 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
有什么建议吗?
答案 0 :(得分:2)
我已经创建了一些示例数据来说明我认为适合您的方法:
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)
一方面注意:如果我正确理解您要做的事情,我建议您在进行屏蔽之前在空间多边形周围添加一个缓冲区。这是因为很可能在你的边缘事件旁边有一个高栖息地适用性的区域,但在凸包外面,你应该小心将它们剪掉。