在R中对全球1km分辨率SpatRaster进行空间分割的方法
空间分割SpatRaster为均等块
要实现空间分割(而非按图层分割)SpatRaster为均等尺寸的多个子栅格,可以使用terra包中的makeTiles()函数,这是专门用于空间分块的工具。以下是具体实现方法:
基础示例(以logo.tif为例)
首先加载数据:
library(terra) s <- rast(system.file("ex/logo.tif", package="terra"))
方法1:按指定数量分割
直接指定要分割的总块数,函数会自动计算均等的空间范围:
# 分割为6个均等空间块 tiles <- makeTiles(s, n = 6) # 查看分割结果(SpatRasterCollection类型) tiles # 查看单个子栅格 tiles[[1]]
方法2:按行列数分割
如果需要更精确控制分块的行列布局(比如2行3列,共6块),可以指定nrow和ncol参数:
# 分割为2行3列,共6个空间块 tiles <- makeTiles(s, nrow = 2, ncol = 3)
保存分割后的子栅格
如果需要将每个子栅格保存到本地文件,可以循环遍历集合:
for (i in seq_along(tiles)) { writeRaster(tiles[[i]], paste0("spatial_tile_", i, ".tif"), overwrite = TRUE) }
自定义分割(进阶)
如果需要完全手动控制分割范围,可以通过计算每个子块的extent后裁剪:
# 获取原栅格的范围 e <- ext(s) # 定义x、y方向的分割断点(3列需4个断点,2行需3个断点) x_breaks <- seq(e[1], e[2], length.out = 4) y_breaks <- seq(e[3], e[4], length.out = 3) # 循环生成每个子栅格 tiles <- list() idx <- 1 for (row in 1:2) { for (col in 1:3) { # 构建当前子块的范围 tile_ext <- ext(x_breaks[col], x_breaks[col+1], y_breaks[row], y_breaks[row+1]) # 裁剪得到子栅格 tiles[[idx]] <- crop(s, tile_ext) idx <- idx + 1 } } # 转换为SpatRasterCollection便于管理 tiles <- sprc(tiles)
注意事项
- 对于全球1km分辨率的栅格,
makeTiles()同样适用:若为地理坐标系(如WGS84),将按经纬度范围均等分割;若为投影坐标系,则按投影单位(如米)均等分割。 - 当原栅格的行列数无法被分割数整除时,最后一块的尺寸会略有调整,以保证整体覆盖完整。
内容的提问来源于stack exchange,提问作者89_Simple
相关产品推荐
相关产品推荐

