You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:42:57