以前は、クラスSpatial *のシェープファイルで_raster::crop
_と_raster::mask
_を使用していましたが、_rgal::readOGR
_を使用して読み込まれました。
ポリゴンの読み取りと操作にsf
を使用するように、スクリプトを「アップグレード」しているだけです。
_raster::crop
_は、2番目の引数として「extent」オブジェクトを想定しています。これまで、これはSpatial *オブジェクトから自動的に抽出されていました。だから私はraster::crop(raster, polygon)
をすることができました。
これをsf
オブジェクトで機能させるには、醜い回避策としてraster::crop(raster, as.vector(st_bbox(polygon)))
を呼び出すことができます。
_raster::mask
_は明らかに_Raster* object or a Spatial* object
_を予期しているため、唯一の解決策は、as("Spatial")
を使用してsf
オブジェクトをSpatial *オブジェクトに強制的に戻すことでした。
この問題はすべてのraster
関数に一般化されていると思いますか?私は何かを見落としましたか、それともraster
パッケージが(まだ)sf
オブジェクトで機能しない場合ですか?
将来の参考のために、それは今動作します!これは?crop
から少し変更されたサンプルコードで、rasterバージョン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)
「sf」パッケージの発表 CRANで利用可能は2017年1月に書かれました。
「ラスター」パッケージの最後のリリース は2016年6月でした。
「sf」パッケージは新しすぎて、ラスターパッケージではまだ機能しません。
したがって、今のところ、「醜い回避策」を使用する必要があります...