¿Existe una función para recortar el objeto de mapa sf, similar a la maptools::pruneMap(lines, xlim= c(4, 10), ylim= c(10, 15))
utilizada para SpatialPolygon o SpatialLine?
Estoy considerando st_intersection()
pero puede haber una manera adecuada.
st_intersection
Es probablemente la mejor manera. Encuentre la forma que funcione mejor para lograr que un sf
objeto se cruce con su entrada. Aquí hay una manera de usar la comodidad raster::extent
y una combinación de lo antiguo y lo nuevo. nc
es creado por example(st_read)
:
st_intersection(nc, st_set_crs(st_as_sf(as(raster::extent(-82, -80, 35, 36), "SpatialPolygons")), st_crs(nc)))
No creo que pueda convencer st_intersection
para que no necesite un CRS que coincida exactamente, por lo tanto, establezca ambos en NA o asegúrese de que sean iguales. No hay herramientas fáciles para bbox / extensión afaik, por lo que usar raster es una buena manera de facilitar las cosas.
st_intersection
pero no pude resolverlo yo mismo.spex::spex
para reemplazar last_as_sf(as(...))
llamada. Además,tmaptools::crop_shape()
puede hacer esto.sf
ahora incluyest_crop
, mira mi respuesta para más detalles.Desde hoy , hay una
st_crop
función en la versión de github desf
(devtools::install_github("r-spatial/sf")
, probablemente en CRAN en el futuro cercano también).Solo emite:
El vector debe ser nombrado con
xmin xmax ymin ymax
(en cualquier orden).También puede usar cualquier objeto que pueda leerse
st_bbox
como límite de recorte, lo cual es muy útil.fuente
Otra solución, para mí fue más rápido para archivos de forma más grandes:
fuente
st_intersection()
enfoque fue usuario: 1.18, sistema: 0.05, transcurrió 1.23 en su conjunto de datos. (Probablemente mi entorno es diferente al suyo ... no estoy seguro.)sf
ahora incluyest_crop
, mira mi respuesta para más detalles.La solución de @ mdsumner como función. Funciona si
rasta
es un RasterBrick, extensión, bbox, etc.Descarta la información crs del ráster porque no sé cómo convertir un ráster crs () en un st_crs ()
En mi máquina y para mi muestra de datos, esto tiene un rendimiento equivalente al
raster::crop
de una versión SpatialLinesDataFrame de los datos.La solución de @ pbaylis es aproximadamente 2.5 veces más lenta:
Editar: el comentario de Somebodies sugiere spex , que produce SpatialPolygons con los crs del rasta, si tiene un crs.
Este código usa el mismo método que spex:
fuente
st_crop
función que probablemente valga la pena revisar.