给定投影 A 中的大型栅格数据集 (
ras
)(理想情况下是云优化的 GeoTIFF)和投影 B 中的矢量数据集 (vec
),覆盖 ras
的一小部分。在 R 中获得与 vec
相交的栅格数据的有效方法是什么?
一种方法是读取数据,重新投影它,裁剪它,屏蔽它。
ras <- terra::rast(rasterpath)
vec <- sf::st_read(vectorpath)
ras_reproject <- terra::project(ras, terra::crs(vec))
ras_crop <- terra::crop(ras_reproject , vec)
但是重投影需要很长时间,我不想将整个栅格数据集加载到内存中。
有没有像
read_raster(rasterpath, extent=vec)
这样的功能的包?
我不确定这是否适用于所有情况, 但是 {{ezwarp}} 库和构建在 gdal 上的底层 {{vapour}} 库做了我想要的
library(ezwarp)
ras_crop <- ezwarp(
x = rasterpath, y = rasterpath, res = 10, cutline = vec,
crop_to_cutline = TRUE, engine = "vapour"
)
您可以投影矢量数据,而不是栅格数据。这会快得多,但通常也更好,因为它不会导致数据丢失。
ras <- terra::rast(rasterpath)
vec <- terra::vect(vectorpath)
pvec <- terra::project(vec, ras)
ras_crop <- terra::crop(ras, pvec)