R:处理光栅包中的sf对象

时间:2017-03-21 12:38:11

标签: r r-raster sf

以前我使用raster::cropraster::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,唯一的解决方案是使用sfas("Spatial")对象强制回空间*对象。

我认为这个问题推广到所有raster函数?我是否忽略了某些内容,或者raster包还没有(还)与sf个对象一起使用?

2 个答案:

答案 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”包太新了,无法使用光栅包 所以,现在,你需要使用你的“丑陋的解决方法”......