使用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
相关产品推荐
相关产品推荐

