3

我正在寻求您的 R 技能支持。对于我的一篇论文,我正在使用遥感变量(LT 波段 3、4、5、7、DEM 和 NDVI)对亚马逊地区树种的分布进行建模,并且我计划将所有站点从“凸我的预测器的船体”。我已经审查了 R(convhull、convhulln)中的几个包和函数,但没有成功。

我已经提取了超过 6000 个存在点的所有变量值。我需要对那组点做一个凸包,然后把它带到地理空间,然后把所有东西都屏蔽掉。所以基本上我需要一个带有 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)

预测变量

   #      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

有什么建议么?

4

1 回答 1

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)

在此处输入图像描述


下面我使用示例数据

  1. 识别构成凸包的点
  2. 创建凸包SpatialPolygon
  3. 遮罩光栅,以便只保留截取凸包的单元格

# 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)

在此处输入图像描述

附注:如果我正确理解您要做什么,我建议您在进行遮罩之前在空间多边形周围添加一个缓冲区。这是因为最有可能在您的边缘事件旁边但在凸包之外具有高栖息地适宜性的区域,您应该小心将它们剪掉。

于 2017-07-25T15:21:45.657 回答