以前,我将raster::cropraster::mask与Spatial *类的shapefile一起使用,并使用rgal::readOGR进行了读入。

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

栅格:: crop

raster::crop期望将“范围”对象作为第二个参数。到目前为止,这是从Spatial *对象中自动提取的。所以我可以做raster::crop(raster, polygon)
为了使它与sf对象一起工作,我可以将raster::crop(raster, as.vector(st_bbox(polygon)))称为丑陋的解决方法。

光栅::遮罩

由于raster::mask明确希望使用Raster* object or a Spatial* object,因此唯一的解决方案是使用sfas("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 - R:处理栅格数据包中的sf对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42927384/

10-11 06:12