【问题标题】:Extract values from raster从栅格中提取值
【发布时间】:2022-01-22 15:03:02
【问题描述】:

我正在尝试从随机点图层的栅格中提取数据。

输入数据是我必须提取值的栅格和多边形的 shapefile。使用这个 shapefile,我可以对多边形内的点进行随机采样。这是通过 SF 包完成的,我得到了一层 sfc_POINTS。 然后,我尝试使用 raster 包提取包含这些点的栅格值。

我收到此错误: (函数(类,fdef,mtable)中的错误: 无法找到签名“RasterLayer”、“sfc_POINT”的函数“extract”的继承方法

代码如下:

# Clean environment 
rm(list = ls())

#Import packages
library(sf)
library(raster)


#Import data 
shp = st_read("PATH_TO_MY_SHP")
rst = raster("PATH_TO_MY_RASTER")

#Random sampling
Rdmsamp = st_sample(shp,  1000, "random")
Rdmsamp_values = raster::extract(rst, shp)

如果有人可以帮助我,请。 PS:是否可以在样本点设置中集成距离条件(例如到多边形边缘的距离或点之间的最小距离?)

谢谢

【问题讨论】:

  • 嗨@Carl Bethuel,请提供minimal reproducible example,以便我们以最好的方式帮助您。干杯。
  • 嗨@lovalery,谢谢你的建议,我下次会考虑的。这里任何矢量和光栅文件都可以做测试,我认为问题来自包之间的冲突。干杯。

标签: r raster shapefile sf


【解决方案1】:

首先是 terra(光栅的替代品):

library(terra)
fv <- system.file("ex/lux.shp", package="terra")
v <- vect(fv)
fr <- system.file("ex/elev.tif", package="terra")
r <- rast(fr)

pts <- spatSample(v, 100, "random")
e <- extract(r, pts)

现在在sf 进行采样

library(sf)
shp <- st_as_sf(v)
rsamp = st_sample(shp, 100, "random")
rsp <- vect(rsamp)
vals <- extract(r, rsp)

或者将该示例与raster一起使用

library(raster)
rr <- raster(fr)
sfsamp <- st_as_sf(rsamp)
vv <- extract(rr, sfsamp)

【讨论】:

  • 感谢您的支持!我尝试使用 terre 包运行代码,但出现此错误:“错误:[vect] 无法以 SpatVector 形式打开此文件”当我运行以下行时:“v
【解决方案2】:

我来这里是为了用我在上一个答案中给出的元素来回答我自己的问题。 上一个答案中使用的代码运行良好。在提取我仅获得 NaN 值的值时,问题仍然存在。这个问题只是来自用于每一层的 CRS,所以你必须考虑将不同的层重新投影到同一个 CRS。 希望这一澄清对将来的某些人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多