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

使用shapefile裁剪NetCDF后保存出现grid_mapping相关ValueError求助

报错原因

这个错误的核心是rioxarray写入CRS信息时,会给所有数据变量的属性添加grid_mapping字段,而xarray调用to_netcdf方法时会自动在变量的序列化编码中生成同名的grid_mapping字段,两者重复导致写入冲突。保存为GeoTIFF时rioxarray的to_raster方法会自动处理该冲突,因此不会报错。

可行解决方法

方法1:删除变量属性中的grid_mapping字段

遍历所有数据变量,手动删除属性中重复的grid_mapping字段后再保存:

import rioxarray as rxr
import rasterio as rio
import xarray as xr
import geopandas as gpd
from shapely.geometry import mapping

xds = xr.open_dataset("file.nc")
geodf = gpd.read_file("shape.shp")
xds.rio.write_crs("EPSG:4326", inplace=True)
clipped = xds.rio.clip(geodf.geometry.apply(mapping), geodf.crs)

# 新增:删除所有数据变量属性中的grid_mapping
for var in clipped.data_vars:
    if "grid_mapping" in clipped[var].attrs:
        del clipped[var].attrs["grid_mapping"]

clipped.to_netcdf("test.nc")

方法2:保存时通过encoding参数指定忽略grid_mapping

不需要修改属性,直接在保存时通过编码配置规避冲突:

# 其余裁剪代码同上
encoding = {var: {"grid_mapping": None} for var in clipped.data_vars}
clipped.to_netcdf("test.nc", encoding=encoding)

方法3:删除rioxarray生成的空间参考变量

如果不需要在输出的NetCDF中保留CRS信息,可以直接删除rioxarray插入的spatial_ref变量后保存:

# 其余裁剪代码同上
if "spatial_ref" in clipped:
    clipped = clipped.drop_vars("spatial_ref")
clipped.to_netcdf("test.nc")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:15:02