栅格化sf对象后出现意外横竖空白线问题求助
解决sf对象栅格化后出现空白线的问题
排查方向和解决办法
- 修复矢量数据拓扑问题:你的
tmp_buf大概率存在微小缝隙、无效几何或重复要素,这是栅格化出问题的常见诱因,先做以下处理:# 修复无效几何 tmp_buf <- sf::st_make_valid(tmp_buf) # 删除重复的几何要素 tmp_buf <- tmp_buf[!duplicated(sf::st_geometry(tmp_buf)), ] # 合并相邻且属性一致的要素 tmp_buf <- sf::st_union(tmp_buf) |> sf::st_as_sf() - 统一坐标参考系(CRS):确认
afr_r和tmp_buf的CRS完全一致,哪怕细微差异都会导致对齐错位,执行统一操作:tmp_buf <- sf::st_transform(tmp_buf, crs = terra::crs(afr_r)) - 重新生成模板栅格:空白线可能是模板栅格
afr_r的范围、原点与矢量不匹配导致的,基于tmp_buf的范围重建模板:afr_r_fixed <- terra::rast(ext(tmp_buf), resolution = terra::res(afr_r), crs = terra::crs(afr_r)) tmp_r <- fasterize::fasterize(tmp_buf, afr_r_fixed, field = "rwi", fun = "first") |> terra::rast() - 排除绘图渲染bug:有时候空白线只是绘图工具的显示问题,换个绘图方式验证:
# 用terra自带绘图函数 terra::plot(tmp_r) # 用ggplot2验证 library(ggplot2) ggplot() + geom_raster(data = as.data.frame(tmp_r, xy = TRUE), aes(x = x, y = y, fill = rwi))
内容的提问来源于stack exchange,提问作者Kowoon Jeong
相关产品推荐
相关产品推荐

