R:光栅包中sf对象的处理
以前我使用的是R:光栅包中sf对象的处理,r,r-raster,sf,R,R Raster,Sf,以前我使用的是graster::crop和graster::mask和类Spatial*的shapefile,使用rgal::readOGR读入 我只是在“升级”我的脚本,以便使用sf读取和操作多边形 光栅::裁剪 raster::crop需要一个“extent”对象作为第二个参数。到目前为止,这是从空间*对象中自动提取的。所以我可以只做光栅::裁剪(光栅,多边形) 要使用sf对象实现这一点,我可以调用raster::crop(raster,as.vector(st_bbox(polygon))
graster::crop
和graster::mask
和类Spatial*的shapefile,使用rgal::readOGR
读入
我只是在“升级”我的脚本,以便使用sf
读取和操作多边形
光栅::裁剪
raster::crop
需要一个“extent”对象作为第二个参数。到目前为止,这是从空间*对象中自动提取的。所以我可以只做光栅::裁剪(光栅,多边形)
要使用
sf
对象实现这一点,我可以调用raster::crop(raster,as.vector(st_bbox(polygon))
作为一种难看的解决方法
光栅:掩模
由于raster::mask
显然需要raster*对象或space*对象
,因此唯一的解决方案是使用as(“space”)
将sf
对象强制回space*对象
我假设这个问题可以推广到所有光栅函数?我是否忽略了什么,或者仅仅是因为光栅
包(尚未)无法处理sf
对象 CRAN上的可用版本于2017年1月编写。
会议于2016年6月举行
“sf”软件包太新,无法与光栅软件包一起使用。
所以,现在,你需要使用你的“丑陋的变通方法”…作为将来的参考,现在就可以了!下面是一些从2017年11月13日发布的?crop
中略作修改的示例代码,使用光栅测试
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)
库(光栅)
图书馆(sf)
r您不希望as.vector(st_bbox(pnt_buf))
而是as.vector(st_bbox(pnt_buf))[c(1,3,2,4)]
,因为crop期望c(xmin,xmax,ymin,ymax)
您可以打印sf版本吗?这会在方法中产生错误::validObject(y):无效的类“区段”对象:TRUE,相同的光栅版本。Sure@bw4sz,packageVersion(“sf”)
是'0.6.4'
。我在OSX(Mojave)上的sf0.7.1
和光栅2.7.15
仍然会遇到这个错误。这是没有修好的吗?