Existe uma função para cortar o objeto sf map, semelhante ao maptools::pruneMap(lines, xlim= c(4, 10), ylim= c(10, 15))
usado para SpatialPolygon ou SpatialLine?
Estou considerando, st_intersection()
mas pode haver maneira adequada.
st_intersection
é provavelmente o melhor caminho. Encontre a melhor maneira de fazer com que um sf
objeto se cruze com sua entrada. Aqui está uma maneira de usar a conveniência raster::extent
e uma mistura de antigo e novo. nc
é criado por example(st_read)
:
st_intersection(nc, st_set_crs(st_as_sf(as(raster::extent(-82, -80, 35, 36), "SpatialPolygons")), st_crs(nc)))
Eu não acho que você pode convencer st_intersection
a não precisar de um CRS correspondente exato; portanto, defina-os como NA ou verifique se são iguais. Não há ferramentas fáceis para o bbox / extension afaik, portanto, usar o raster é uma boa maneira de facilitar as coisas.
st_intersection
mas não consegui resolver sozinho.spex::spex
para substituir ast_as_sf(as(...))
chamada. Além disso,tmaptools::crop_shape()
pode fazer isso.sf
agora incluist_crop
, veja minha resposta para detalhes.Desde hoje , existe uma
st_crop
função na versão github desf
(devtools::install_github("r-spatial/sf")
, provavelmente também no CRAN no futuro próximo).Basta emitir:
O vetor deve ser nomeado com
xmin xmax ymin ymax
(em qualquer ordem).Você também pode usar qualquer objeto que possa ser lido
st_bbox
como limites de corte, o que é muito útil.fonte
Outra solução alternativa, para mim, foi mais rápida para arquivos de forma maiores:
fonte
st_intersection()
abordagem foi user: 1,18, sistema: 0,05, decorrido 1,23 no seu conjunto de dados. (Provavelmente o meu ambiente é diferente com o seu ... não tenho certeza.)sf
agora incluist_crop
, veja minha resposta para detalhes.A solução do @ mdsumner como uma função. Funciona se
rasta
for um RasterBrick, extensão, bbox, etc.Ele joga fora as informações crs da varredura, porque não sei como converter uma varredura crs () em st_crs ()
Na minha máquina e para minha amostra de dados, isso tem desempenho equivalente ao de
raster::crop
uma versão SpatialLinesDataFrame dos dados.A solução do @ pbaylis é cerca de 2,5 vezes mais lenta:
Edit: Somebodies comment sugere spex , que produz SpatialPolygons com os crs do rasta, se ele tiver um crs.
Este código usa o mesmo método que spex:
fonte
st_crop
função que provavelmente vale a pena conferir.