我有以下shapefile和netcdf file
我想从包含在shapefile边界内的netcdf文件中提取数据。
你对我如何做到这一点有什么建议吗
shapefile对应于SREX区域11North Europe (NEU),netcdf文件是CMIP6气候模型数据输出(ua变量)的一个示例。我想要的输出必须是netcdf格式
更新
到目前为止,我尝试使用NCL和CDO创建netcdf掩码,并将此掩码应用于原始netcdf数据集。以下是步骤(和NCL scripts):
#################
## remove plev dimension from netcdf file
cdo --reduce_dim -copy nc_file.nc nc_file2.nc
## convert longitude to -180, 180
cdo sellonlatbox,-180,180,-90,90 nc_file2.nc nc_file3.nc
## create mask
ncl create_nc_mask.ncl
## apply mask
cdo div nc_file3.nc shape1_mask.nc nc_file4.nc
#################
输出几乎正确。见下图。但未正确捕捉形状文件(SREX 11,NEU)的南部边界。因此,我认为生成netcdf掩码的NCL脚本中存在错误
到目前为止,我提出了这个(我知道它不是完整的解决方案):
(一) 要打开shapefile和nc文件,需要安装两个软件包:
(二) 下面是在python中导入它们的方式:
(三) 从shapefile读取数据:
这将为您提供以下输出:
4)读取nc文件:
5)使用此辅助功能查看内部内容:
我想您将需要名为‘ua’的变量,因为它同时具有经度和纬度地址
因此,为了构造遮罩,您必须从“ua”提取所有内容,其中经度和纬度位于shapefile的边界框值之间
在重新使用一些旧脚本/代码时,我很快为Python解决方案想出了这个方法。它基本上只是在所有网格点上循环,并检查每个网格点是否位于形状文件中多边形的内部或外部。结果是变量
mask
(带有True/False
的数组),可用于屏蔽NetCDF变量注意:这使用了Numba(所有
@jit
行)来加速代码,尽管在这种情况下这并不是必需的。如果你没有麻木,你可以把它们注释掉编辑
要将掩码写入NetCDF,可以使用如下内容:
相关问题 更多 >
编程相关推荐