以前我使用 raster::crop
和 raster::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")
将对象返回到 Spatial* 对象.
我假设这个问题适用于所有 raster
职能?我是否忽略了某些东西,或者只是 raster
的情况?包(还)不能与 sf
一起使用对象?
最佳答案
为了将来引用,它现在可以工作了!这是来自 ?crop
的一些稍作修改的示例代码, 使用 测试光栅 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)
关于R:处理光栅包中的 sf 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42927384/