Есть ли функция обрезки sf карты, похожая на maptools::pruneMap(lines, xlim= c(4, 10), ylim= c(10, 15))
используемую для SpatialPolygon или SpatialLine?
Я рассматриваю, st_intersection()
но может быть правильный путь.
st_intersection
это, наверное, лучший способ. Найдите любой способ, который лучше всего подходит sf
для пересечения объекта с вашим входом. Вот способ, использующий удобство raster::extent
и сочетание старого и нового. nc
создается example(st_read)
:
st_intersection(nc, st_set_crs(st_as_sf(as(raster::extent(-82, -80, 35, 36), "SpatialPolygons")), st_crs(nc)))
Я не думаю, что вы можете уговорить st_intersection
не требовать точного соответствия CRS, поэтому либо установите оба параметра на NA, либо убедитесь, что они одинаковые. Для bbox / экстента afaik нет простых инструментов, поэтому использование растра - хороший способ облегчить задачу.
st_intersection
но не мог решить это сам.spex::spex
для заменыst_as_sf(as(...))
вызова. Кроме того,tmaptools::crop_shape()
можете сделать это.sf
теперь включаетst_crop
, см. мой ответ для деталей.С сегодняшнего дня
st_crop
в github-версии есть функцияsf
(devtools::install_github("r-spatial/sf")
возможно, на CRAN и в ближайшем будущем).Просто выпустите:
Вектор должен быть назван с
xmin xmax ymin ymax
(в любом порядке).Вы также можете использовать любой объект, который может быть прочитан
st_bbox
как предел обрезки, что очень удобно.источник
Другой обходной путь, для меня это было быстрее для больших шейп-файлов:
источник
st_intersection()
подход был пользователь: 1.18, система: 0.05, прошло 1.23 в вашем наборе данных. (Возможно , мое окружение отличается с вашим ... не уверен.)sf
теперь включаетst_crop
, см. мой ответ для деталей.Решение @ mdsumner как функция. Работает, если
rasta
есть RasterBrick, экстент, bbox и т. Д.Он выбрасывает информацию о растровом crs, потому что я не знаю, как преобразовать растр crs () в st_crs ()
На моем компьютере и для моего образца данных это эквивалентно производительности
raster::crop
с версией данных SpatialLinesDataFrame.Решение @ pbaylis примерно в 2,5 раза медленнее:
Редактировать: Комментарий Somebody предлагает spex , который производит SpatialPolygons с crs из раста, если у него есть crs.
Этот код использует тот же метод, что и spex:
источник
st_crop
функцию, которую, вероятно, стоит проверить.