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

匹配CRS后用Shapefile掩蔽栅格仍全为NaN问题排查

栅格掩蔽后全为NaN的问题解决(使用terra包)

我用R的terra包尝试用Shapefile掩蔽栅格数据,但掩蔽结果全是NaN。已经匹配了栅格和Shapefile的CRS,问题依然存在。查看绘图后发现,问题根源应该是栅格的经度范围不对——当前栅格经度是0-360,而目标区域(厄瓜多尔)的经度在-92到-75之间,两者没有空间重叠,导致掩蔽后全为NaN。


1. NOAA全球温度数据加载代码

# 加载terra包
if (!require(terra)) install.packages('terra', repos='https://rspatial.r-universe.dev')

# 加载NOAA全球温度数据
tmax_2018 <- rast("data/temperature/tmax.2018.nc")
tmax_2018_Jan1 <- tmax_2018[[1]]

栅格数据信息:

class : SpatRaster
dimensions : 360, 720, 1 (nrow, ncol, nlyr)
resolution : 0.5, 0.5 (x, y)
extent : 0, 360, -90, 90 (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84
source : tmax.2018.nc
varname : tmax (Daily Maximum Temperature)
name : tmax_1
unit : degC
time : 2018-01-01 UTC


2. 厄瓜多尔Shapefile加载代码

# 加载sf包
if (!require("sf")) install.packages("sf")

# 加载厄瓜多尔Shapefile
ecuador_shp <- st_read('data/ecu_shapefiles/ECU_adm1.shp')
ecuador_shp <- st_simplify(ecuador_shp, preserveTopology = TRUE, dTolerance = 100)

# 转换CRS以匹配SpatRaster的CRS
ecuador_shp <- st_transform(ecuador_shp, crs(tmax_2018_Jan1))

# 将sf类转换为terra的SpatVector类
ecuador_shp <- vect(ecuador_shp)

矢量数据信息:

class : SpatVector
geometry : polygons
dimensions : 24, 9 (geometries, attributes)
extent : -92.00854, -75.20007, -5.017001, 1.681093 (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84
names : ID_0 ISO NAME_0 ID_1 NAME_1 TYPE_1 ENGTYPE_1 NL_NAME_1 VARNAME_1
type :
values : 68 ECU Ecuador 1 Azuay Provincia Province NA NA
68 ECU Ecuador 2 Bolivar Provincia Province NA NA
68 ECU Ecuador 3 Cañar Provincia Province NA NA


3. 原始掩蔽操作代码

tmax_2018_Jan1_ecu <- terra::mask(tmax_2018_Jan1, ecuador_shp)
plot(tmax_2018_Jan1) # 显示空白绘图

解决方法

核心问题是栅格的经度范围(0-360)与矢量数据的经度范围(-92到-75)没有重叠,需要将栅格的经度转换为-180到180的格式。使用terra包的rotate()函数即可完成转换:

# 转换栅格经度从0-360到-180-180
tmax_2018_Jan1_rotated <- rotate(tmax_2018_Jan1)

# 再次执行掩蔽操作
tmax_2018_Jan1_ecu <- terra::mask(tmax_2018_Jan1_rotated, ecuador_shp)

# 查看结果
plot(tmax_2018_Jan1_ecu)

rotate()函数会自动调整栅格的经度范围,并重新排列栅格数据,确保地理坐标与矢量数据的范围匹配,这样掩蔽操作就能正确提取目标区域的栅格值。

内容的提问来源于stack exchange,提问作者Alonso Quijano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:27:49