将值从SpatRaster转移到新栅格后无法读取,求排查问题
问题排查与解决方案
以下是你用terra包处理风数据栅格化时出现提取NaN的常见错误原因及修复步骤:
1. 坐标参考系(CRS)不匹配
这是最常见的问题:如果带风数据的栅格和德国范围空栅格的CRS不一样,重采样后坐标对应关系会混乱,提取原坐标自然全是NaN。
- 先检查两个栅格的CRS:
crs(wind_raster) crs(empty_germany_raster) - 统一CRS:把风数据栅格转换成空栅格的CRS:
wind_raster <- project(wind_raster, crs(empty_germany_raster))
2. 点转栅格的方式不对
直接从DataFrame转栅格可能没对齐空栅格的像元,导致重采样后值丢失。改用rasterize基于空栅格模板生成风数据栅格更稳妥:
# 先把DataFrame转为矢量点 wind_points <- vect(wind_df, geom = c("lon", "lat"), crs = "EPSG:4326") # 用空栅格作为模板,把点数据栅格化(用mean或其他合适的统计方法) wind_raster <- rasterize(wind_points, empty_germany_raster, field = "dd", fun = mean)
3. 提取时坐标没转投影
原数据的lon/lat是WGS84,但重采样后的栅格可能是德国常用的投影(比如EPSG:3035),直接用WGS84坐标提取会找不到对应像元:
# 把原数据点转为目标栅格的CRS original_points <- vect(wind_df, geom = c("lon", "lat"), crs = "EPSG:4326") original_points_proj <- project(original_points, crs(resampled_wind)) # 再提取值 extracted_values <- extract(resampled_wind, original_points_proj)
4. 空栅格范围没覆盖数据点
如果你的空栅格范围根本没包含那10个风数据点,重采样后肯定全是NaN:
- 检查范围是否重叠:
# 查看空栅格范围 ext(empty_germany_raster) # 查看风数据点的范围 ext(wind_points) - 调整空栅格范围,确保覆盖所有点:
point_ext <- ext(min(wind_df$lon), max(wind_df$lon), min(wind_df$lat), max(wind_df$lat)) empty_germany_raster <- rast(ext = point_ext, crs = crs(wind_points), resolution = res(empty_germany_raster))
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

