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

如何在R中对异分辨率栅格执行800m滑动窗口分析?

基于实际距离的加权滑动窗口分析解决方案

针对你需要严格保留800m生态窗口、对部分重叠像元按面积加权的需求,以下是几个可行的R语言实现方案:

1. 基于terra包的自定义加权滑动窗口

虽然terra的focal()依赖像元数窗口,但可以通过缓冲区提取+面积加权的方式实现需求,步骤如下:

library(terra)
library(sf)

# 读取目标栅格
r <- rast("your_covariate.tif")

# 获取所有像元的中心坐标并转为sf点对象
cell_centers <- xyFromCell(r, 1:ncell(r))
sf_centers <- st_as_sf(data.frame(cell_centers), coords = c("x", "y"), crs = crs(r))

# 生成每个像元中心的800m缓冲区
buffers <- st_buffer(sf_centers, dist = 800)

# 提取缓冲区内的像元值及对应面积权重(weights=TRUE返回像元在缓冲区内的面积占比)
extracted <- extract(r, buffers, weights = TRUE, na.rm = TRUE)

# 计算每个缓冲区的加权统计量(以加权均值为例)
weighted_stats <- lapply(extracted, function(x) {
  if(nrow(x) == 0) return(NA)
  weighted.mean(x$value, x$weight, na.rm = TRUE)
})

# 将结果转为与原栅格匹配的新栅格
result_rast <- setValues(r, unlist(weighted_stats))

2. 使用stars包处理地理空间窗口

stars包原生支持基于地理坐标的操作,可直接按实际距离定义窗口,并自动处理部分重叠像元的权重:

library(stars)
library(sf)

# 读取栅格为stars对象
s <- read_stars("your_covariate.tif")

# 执行滑动窗口加权统计(以加权均值为例)
result_stars <- st_apply(s, c("x", "y"), function(cell) {
  # 获取当前像元中心的800m缓冲区
  cell_center <- st_sfc(st_point(c(cell[["x"]], cell[["y"]])), crs = st_crs(s))
  cell_buffer <- st_buffer(cell_center, dist = 800)
  
  # 提取缓冲区内的像元及面积
  window_vals <- st_crop(s, cell_buffer)
  if(length(window_vals) == 0) return(NA)
  
  # 计算每个像元在缓冲区内的面积占比作为权重
  cell_areas <- st_area(window_vals)
  buffer_area <- st_area(cell_buffer)
  weights <- as.numeric(cell_areas / buffer_area)
  
  # 计算加权均值
  weighted.mean(window_vals[[1]], weights, na.rm = TRUE)
})

# 转为terra栅格方便后续处理
result_rast <- rast(result_stars)

3. spatialEco包的缓冲区统计函数

spatialEco包的buffer.stats()函数可直接针对栅格像元的缓冲区计算加权统计,简化代码:

library(spatialEco)
library(terra)

# 读取栅格
r <- rast("your_covariate.tif")

# 计算每个像元800m缓冲区内的加权均值
result_rast <- buffer.stats(r, window = 800, stat = "weighted.mean", na.rm = TRUE)

以上方案均无需依赖像元大小与窗口尺寸的整除关系,严格保留800m的生态窗口范围,并对部分包含的像元按面积占比加权计算统计量。

内容的提问来源于stack exchange,提问作者madip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:55:10