以前我使用raster::crop
和raster::mask
使用类型为Spatial *的shapefile,使用rgal::readOGR
读入。
我只是“升级”我的脚本以使用sf
来阅读和操作多边形。
raster::crop
期望'extent'对象作为第二个参数。到目前为止,这是从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
个对象一起使用?
答案 0 :(得分:8)
供将来参考,现在可以使用!以下是?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)
答案 1 :(得分:2)
CRAN上的announce of "sf" package写于2017年1月。
last release of "raster" package是在2016年6月。
“sf”包太新了,无法使用光栅包 所以,现在,你需要使用你的“丑陋的解决方法”......