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

使用RSpatial Terra包栅格化矢量数据失败求助

解决terra::rasterize无有效像素的问题

核心原因分析

出现Failed to compute min/max, no valid pixels found警告的常见原因有两个:

  1. right_join导致部分几何丢失:right_join(naro_2020, by = "key_code")会保留naro_2020的所有行,若某些key_code在grid_city_2020子集中不存在,对应行的几何会变成空值(NA),无法参与栅格化。
  2. 栅格模板与jpgrid网格未对齐:日本1km网格(JGD2011,EPSG:6670)是严格按1km间隔对齐的,直接用ext(cities_vector)生成的栅格,其像素边界可能和网格边界完全错位,导致多边形与像素无交集。

分步解决方案

1. 过滤空几何行

先清理掉cities_polygon中几何为空的行,避免无效数据干扰:

cities_polygon <- head(grid_city_2020, n = 30) %>%
  grid_as_sf(crs = 6670) %>%
  mutate(key_code = as.character(grid),
         key_code = as.numeric(key_code)) %>%
  right_join(naro_2020, by = "key_code") %>%
  filter(!st_is_empty(geometry))  # 新增:过滤空几何

2. 创建与jpgrid对齐的栅格模板

利用jpgrid的网格边界特性,生成完全对齐的1km栅格:

# 获取网格的精确边界框
grid_bbox <- grid_bbox(cities_polygon$grid)

# 创建对齐后的栅格模板
template_raster <- rast(
  ext = ext(grid_bbox$xmin, grid_bbox$xmax, grid_bbox$ymin, grid_bbox$ymax),
  resolution = 1000,
  crs = crs(cities_polygon)
)

如果没有grid_bbox函数,也可以手动调整边界到1km整数倍:

bb <- st_bbox(cities_polygon)
xmin <- floor(bb[1]/1000)*1000
ymin <- floor(bb[2]/1000)*1000
xmax <- ceiling(bb[3]/1000)*1000
ymax <- ceiling(bb[4]/1000)*1000

template_raster <- rast(
  ext = ext(xmin, xmax, ymin, ymax),
  resolution = 1000,
  crs = crs(cities_polygon)
)

3. 重新执行栅格化

cities_vector <- vect(cities_polygon)
cities_raster <- rasterize(cities_vector, template_raster, field = "avg_hot_days_35")

# 验证结果
plot(cities_raster)
plot(cities_vector, add = TRUE, border = "red", lwd = 0.5)  # 叠加多边形看是否对齐

额外验证步骤

  • 执行table(st_is_empty(cities_polygon$geometry))确认无空几何
  • 执行plot(template_raster); plot(cities_vector, add=TRUE)检查多边形是否落在栅格范围内

内容的提问来源于stack exchange,提问作者Villas di Ampiastrada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:29:54