st_intersection
est probablement le meilleur moyen. Trouvez la méthode qui convient le mieux pour qu'un sf
objet croise votre entrée. Voici une façon d'utiliser la commodité raster::extent
et un mélange d'ancien et de nouveau. nc
est créé par example(st_read)
:
st_intersection(nc, st_set_crs(st_as_sf(as(raster::extent(-82, -80, 35, 36), "SpatialPolygons")), st_crs(nc)))
Je ne pense pas que vous pouvez cajoler st_intersection
pour ne pas avoir besoin d'un CRS correspondant exactement, alors définissez-les tous les deux sur NA ou assurez-vous qu'ils sont les mêmes. Il n'y a pas d'outils simples pour bbox / extend afaik, donc utiliser raster est un bon moyen de simplifier les choses.
st_intersection
mais je n'ai pas pu le résoudre moi-même.spex::spex
pour remplacer l'st_as_sf(as(...))
appel. , Aussitmaptools::crop_shape()
peut le faire.sf
comprend maintenantst_crop
, voir ma réponse pour plus de détails.Depuis aujourd'hui , il existe une
st_crop
fonction dans la version github desf
(devtools::install_github("r-spatial/sf")
, probablement sur CRAN dans un avenir proche aussi).Il suffit d'émettre:
Le vecteur doit être nommé avec
xmin xmax ymin ymax
(dans n'importe quel ordre).Vous pouvez également utiliser n'importe quel objet pouvant être lu
st_bbox
comme limites de recadrage, ce qui est très pratique.la source
Une autre solution de contournement, pour moi, c'était plus rapide pour les fichiers de formes plus volumineux:
la source
st_intersection()
approche était utilisateur: 1.18, système: 0.05, écoulé 1.23 sur votre jeu de données. (Mon environnement est probablement différent du vôtre ... je n'en suis pas sûr.)sf
comprend maintenantst_crop
, voir ma réponse pour plus de détails.@ solution de mdsumner en fonction. Fonctionne si
rasta
est un RasterBrick, une extension, une bbox, etc.Il jette les informations crs du raster car je ne sais pas comment convertir un raster crs () en st_crs ()
Sur ma machine et pour mon échantillon de données, cela a des performances équivalentes à celles
raster::crop
d'une version SpatialLinesDataFrame des données.La solution de @ pbaylis est environ 2,5 fois plus lente:
Edit: le commentaire de Somebodies suggère spex , qui produit des SpatialPolygons avec les crs du rasta, s'il a un crs.
Ce code utilise la même méthode que spex:
la source
st_crop
fonction qui mérite probablement d'être vérifiée.