R语言中如何降低stars对象分辨率 实现类似raster包aggregate效果
stars包整倍数降低栅格分辨率的实现方法
报错原因
你遇到的参数缺失报错,是因为stars包的aggregate方法和raster包的参数逻辑不同:调用时必须传入两类聚合依据的其中一类,要么是整倍数像元合并参数fact,要么是自定义聚合分区对象by,直接调用不传这两个参数就会触发你看到的报错。
等价于raster包aggregate(factor=4)的写法
如果只是要按固定整倍数合并像元、统一降低分辨率,不需要额外准备聚合参考数据,直接传入fact参数指定聚合倍数即可,和raster包的操作逻辑几乎一致:
# 示例:将输入stars对象每4*4个像元合并为1个像元,默认用均值计算聚合后的值 stars_resampled <- aggregate(your_stars_object, fact = 4, FUN = mean)
参数说明:
fact:若传入单个数值,代表x、y方向使用相同的聚合倍数;若传入长度为2的数值向量,可分别指定x、y方向的聚合倍数,例如fact = c(4,2)代表x方向每4个像元合并、y方向每2个像元合并。FUN:聚合计算函数,可根据数据类型替换:连续型栅格常用mean(均值)、max(最大值)、min(最小值);分类型栅格可传入自定义众数函数实现类别聚合。
其他聚合场景
如果需要把栅格聚合对齐到另一套已有的粗分辨率网格,或者按矢量边界分区聚合,就把参考网格/矢量对象传入by参数即可:
# 示例:对齐到已有的粗分辨率stars网格 stars_resampled <- aggregate(your_stars_object, by = coarse_stars_grid, FUN = mean) # 示例:按矢量行政区范围聚合统计 stars_agg_by_region <- aggregate(your_stars_object, by = admin_vector, FUN = mean)
大文件处理提示
处理超高分辨率栅格时,读取数据阶段建议开启代理模式,避免一次性把全量数据加载进内存导致崩溃:
# 读取栅格时开启代理 large_stars <- read_stars("your/raster/file/path.tif", proxy = TRUE) # 后续聚合操作逻辑和之前完全一致 large_stars_agg <- aggregate(large_stars, fact = 4, FUN = mean) # 计算完成后可使用write_stars写出结果 write_stars(large_stars_agg, "output/resampled_raster.tif")
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

