带有NA的栅格文件作为环境凸包外的区域

时间:2017-07-24 19:16:00

标签: r geospatial raster convex-hull maxent

我要求你的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)

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

有什么建议吗?

1 个答案:

答案 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)

enter image description here

下面我使用示例数据

  1. 识别构成凸包的点
  2. 创建一个凸包SpatialPolygon
  3. 屏蔽光栅,以便只有拦截凸包的单元格
  4. # 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)
    

    enter image description here

    一方面注意:如果我正确理解您要做的事情,我建议您在进行屏蔽之前在空间多边形周围添加一个缓冲区。这是因为很可能在你的边缘事件旁边有一个高栖息地适用性的区域,但在凸包外面,你应该小心将它们剪掉。