19

以前我使用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唯一的解决方案是sf使用as("Spatial").

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

4

1 回答 1

15

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

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)
于 2018-05-02T15:07:46.463 回答