Czy istnieje funkcja przycinania obiektu mapy sf, podobna do tej maptools::pruneMap(lines, xlim= c(4, 10), ylim= c(10, 15))
używanej w przypadku SpatialPolygon lub SpatialLine?
Rozważam, st_intersection()
ale może być właściwy sposób.
st_intersection
jest prawdopodobnie najlepszym sposobem. Znajdź sposób, który działa najlepiej, aby sf
obiekt przecinał się z wprowadzonymi danymi. Oto sposób korzystania z wygody raster::extent
i połączenia starego i nowego. nc
jest tworzony przez example(st_read)
:
st_intersection(nc, st_set_crs(st_as_sf(as(raster::extent(-82, -80, 35, 36), "SpatialPolygons")), st_crs(nc)))
Nie sądzę, abyś mógł się przekonać, st_intersection
aby nie potrzebować dokładnie pasującego CRS, więc albo ustaw je na NA, albo upewnij się, że są takie same. Nie ma łatwych narzędzi do bbox / scope afaik, więc użycie rastra jest dobrym sposobem na uproszczenie.
st_intersection
ale sam nie mogłem tego rozwiązać.spex::spex
aby zastąpićst_as_sf(as(...))
połączenie. Równieżtmaptools::crop_shape()
mogę to zrobić.sf
zawiera terazst_crop
, zobacz moją odpowiedź, aby uzyskać szczegółowe informacje.Od dzisiaj istnieje
st_crop
funkcja w wersji githubsf
(devtools::install_github("r-spatial/sf")
prawdopodobnie na CRAN również w najbliższej przyszłości).Wystarczy wydać:
Wektor musi być nazwany za pomocą
xmin xmax ymin ymax
(w dowolnej kolejności).Możesz także użyć dowolnego obiektu, który można odczytać,
st_bbox
jako ograniczenia kadrowania, co jest bardzo przydatne.źródło
Kolejne obejście, dla mnie było szybsze dla większych plików kształtów:
źródło
st_intersection()
podejście było użytkownikiem: 1,18, system: 0,05, minęło 1,23 w zbiorze danych. (Prawdopodobnie moje środowisko różni się od twojego ... nie jestem pewien.)sf
zawiera terazst_crop
, zobacz moją odpowiedź, aby uzyskać szczegółowe informacje.@ Rozwiązanie mdsumner jako funkcja. Działa, jeśli
rasta
jest to RasterBrick, zakres, bbox itp.Wyrzuca informacje CRS o rastrze, ponieważ nie wiem jak przekonwertować CRS raster () na st_crs ()
Na moim komputerze i dla mojej próbki danych ma to wydajność równoważną
raster::crop
z wersją danych SpatialLinesDataFrame.Rozwiązanie @ pbaylis jest około 2,5 razy wolniejsze:
Edycja: Komentarz Somebodies sugeruje spex , który tworzy SpatialPolygons z crs z rasta, jeśli ma crs.
Ten kod używa tej samej metody co spex:
źródło
st_crop
funkcję, którą prawdopodobnie warto sprawdzić.