st_intersection
ist wohl der beste weg. Finden Sie heraus, wie es am besten funktioniert, um ein sf
Objekt mit Ihrer Eingabe zu kreuzen. Hier finden Sie eine Möglichkeit, die Bequemlichkeit von raster::extent
und eine Mischung aus Altem und Neuem zu nutzen. nc
wird erstellt von example(st_read)
:
st_intersection(nc, st_set_crs(st_as_sf(as(raster::extent(-82, -80, 35, 36), "SpatialPolygons")), st_crs(nc)))
Ich glaube nicht, dass Sie dazu überreden können st_intersection
, ein genau passendes CRS nicht zu benötigen. Setzen Sie daher entweder beide auf NA oder stellen Sie sicher, dass sie gleich sind. Es gibt keine einfachen Tools für Bbox / Extent Afaik, daher ist die Verwendung von Raster eine gute Möglichkeit, die Dinge einfacher zu gestalten.
st_intersection
, konnte es aber nicht selbst lösen.spex::spex
, um denst_as_sf(as(...))
Anruf zu ersetzen . Auchtmaptools::crop_shape()
kann dies tun.sf
jetzt enthältst_crop
, siehe meine Antwort für Details.Seit heute gibt es eine
st_crop
Funktion in der Github-Version vonsf
(devtools::install_github("r-spatial/sf")
wahrscheinlich auch auf CRAN in naher Zukunft).Einfach ausgeben:
Der Vektor muss mit
xmin xmax ymin ymax
(in welcher Reihenfolge auch immer) benannt werden.Sie können auch jedes Objekt verwenden, das
st_bbox
als Beschneidungsgrenze gelesen werden kann , was sehr praktisch ist.quelle
Eine andere Problemumgehung, für mich war es bei größeren Shapefiles schneller:
quelle
st_intersection()
Annäherung war Benutzer: 1.18, System: 0.05, verstrichene 1.23 in Ihrem Datensatz war. (Wahrscheinlich ist meine Umgebung bei Ihnen anders ... nicht sicher.)sf
jetzt enthältst_crop
, siehe meine Antwort für Details.@ mdsumner's Lösung als Funktion. Funktioniert, wenn
rasta
es sich um einen RasterBrick, einen Extent, eine Bbox usw. handelt.Es wirft die crs-Informationen des Rasters weg, weil ich nicht weiß, wie man ein Raster crs () in ein st_crs () konvertiert
Auf meinem Computer und für mein
raster::crop
Datenbeispiel entspricht dies der Leistung einer SpatialLinesDataFrame-Version der Daten.Die Lösung von @pbaylis ist etwa 2,5-mal langsamer:
Edit: Ein Kommentar von jemandem schlägt Spex vor , das SpatialPolygons mit dem Crs aus dem Rasta erzeugt, wenn es ein Crs hat.
Dieser Code verwendet dieselbe Methode wie spex:
quelle
st_crop
funktion, die es wahrscheinlich wert ist, ausgecheckt zu werden.