【问题标题】:R: Handling of sf objects in raster packageR:处理光栅包中的 sf 对象
【发布时间】:2017-08-13 03:14:26
【问题描述】:

以前我使用raster::cropraster::mask 与Spatial* 类的shapefile,使用rgal::readOGR 读入。

我只是在“升级”我的脚本以使用sf 来读取和操作多边形。

光栅::裁剪

raster::crop 需要一个“范围”对象作为第二个参数。到目前为止,这是从 Spatial* 对象中自动提取的。所以我可以做raster::crop(raster, polygon)
要使用 sf 对象进行此操作,我可以调用 raster::crop(raster, as.vector(st_bbox(polygon))) 作为一个丑陋的解决方法。

光栅::掩码

由于raster::mask 显然期望Raster* object or a Spatial* object,唯一的解决方案是使用as("Spatial")sf 对象强制回Spatial* 对象。

我假设这个问题适用于所有raster 函数?我是否忽略了某些事情,或者只是raster 包(还)不能与sf 对象一起使用?

【问题讨论】:

  • 你不需要as.vector(st_bbox(pnt_buf)),而是as.vector(st_bbox(pnt_buf))[c(1, 3, 2, 4)],因为crop期望c(xmin, xmax, ymin, ymax)

标签: r r-raster sf


【解决方案1】:

为了将来参考,它现在可以工作了!以下是来自 ?crop 的一些稍作修改的示例代码,使用 raster version 2.6-7 进行了测试,该代码已于 2017 年 11 月 13 日发布。

library(raster)
library(sf)

r <- raster(nrow=45, ncol=90)
r[] <- 1:ncell(r)

# crop Raster* with sf object
b <- as(extent(0, 8, 42, 50), 'SpatialPolygons')
crs(b) <- crs(r)
b <- st_as_sf(b) # convert polygons to 'sf' object
rb <- crop(r, b)

# mask Raster* with sf object
mb <- mask(r, b)

【讨论】:

  • 你能打印 sf 版本吗,这会在方法中产生错误::validObject(y) : invalid class “Extent” object: TRUE, 相同的光栅版本。
  • 当然@bw4sz,packageVersion("sf")‘0.6.4’
  • 我仍然在 OS X (Mojave) 上使用 sf 0.7.1 和光栅 2.7.15 收到此错误。这个问题没有解决吗?
【解决方案2】:

CRAN 上的announce of "sf" package 写于 2017 年 1 月。
last release of "raster" package 是 2016 年 6 月。

“sf”包太新,不能与光栅包一起使用。
所以,现在,你需要使用你的“丑陋的解决方法”......

【讨论】:

    猜你喜欢
    • 2020-03-22
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多