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

使用Terra将ML输出的DataFrame转为栅格后出现异常空白

问题

尝试将机器学习输出的DataFrame转换为栅格,已确认原栅格与目标DataFrame的行列数、坐标参考系统(CRS)、范围均一致,但绘制新栅格时出现原栅格没有的异常空白,数据数值差异符合预期,请问空白产生的原因是什么?

原栅格信息:

> r <- rast("./healthydesign-downscaled/hd_039_stratford_tree_downsampled.tif")
> r
class       : SpatRaster 
dimensions  : 613, 859, 1  (nrow, ncol, nlyr)
resolution  : 0.0002694946, 0.0002694946  (x, y)
extent      : -81.10008, -80.86859, 43.28595, 43.45115  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326) 
source      : hd_039_stratford_tree_downsampled.tif 
name        : tree 
min value   :  -99 
max value   :    1 

转换操作及新栅格信息:

r <- rast("./healthydesign-downscaled/hd_039_stratford_tree_downsampled.tif")
r1 <- as.data.frame(r, xy=TRUE, na.rm=FALSE)

# order by x and y 
hi = p2.final[with(p2.final, order(-y,x)), ]

# create a raster 
r2 <- terra::setValues(r, as.matrix(hi$p2))

> r2
class       : SpatRaster 
dimensions  : 613, 859, 1  (nrow, ncol, nlyr)
resolution  : 0.0002694946, 0.0002694946  (x, y)
extent      : -81.10008, -80.86859, 43.28595, 43.45115  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326) 
source(s)   : memory
varname     : hd_039_stratford_tree_downsampled 
name        :         tree 
min value   : 1.728516e-05 
max value   : 9.972497e-01 
原因分析
  • 数据排序与栅格存储顺序不匹配:terra::setValues要求输入数据的顺序必须严格对应栅格单元格的默认存储顺序——即从上到下(y值由大到小)、从左到右(x值由小到大)逐行排列。你用order(-y,x)排序p2.final,看似逻辑正确,但如果p2.final的x/y坐标存在浮点精度误差,或者原DataFrame的行结构本身和栅格单元格顺序有偏差,就会导致部分单元格被错误赋值,出现空白(实际是被赋予NA或无效值)。
  • NoData值处理缺失:原栅格存在-99的NoData值,转换过程中你没有针对这些位置处理p2.final的数值。如果p2.final中对应原NoData的位置未生成有效输出,或被错误设为NA,绘图时就会显示为空白区域。
  • 坐标精度错位:即使范围和CRS一致,p2.final的x/y坐标可能因浮点精度问题,和原栅格的单元格中心坐标存在微小差异,排序后无法精准匹配到对应单元格,最终导致赋值错位出现空白。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:10:58