如何使用CDO在NetCDF文件上应用海掩码如何使用、掩码、文件、NetCDF

2023-09-03 11:53:21 作者:不努力,拿什么说未来

假设我创建了一个netCDF文件,其中有很多零。我希望对数据应用海洋掩码,以便只对海洋中的区域进行真正的掩码,而保留陆地上的数据。

我的数据在陆地上有很多零(这是正确的),但在海中也有很多零(这是不正确的)。

一款零注解侵入的 API 文档生成工具,你用过吗

我本可以使用cdo setmissval,nan input.nc output.nc,但这也会将土地上的值更改为NaN

有人有什么(好的)解决方案吗?

推荐答案

此问题已在此处提出:Create a NetCDF file with data masked to retain land points only

解决方案1:

所以基本上可以使用内置地形功能构建海陆掩模,然后将所有海点设置为MISSING:

cdo -f nc setctomiss,0 -gtc,0 -remapcon,your_data_file.nc -topo seamask.nc
topo:生成地形文件 reMapcon:将其重新映射到您的输入 文件分辨率 GTC,0:以上所有地形点设置为1 海平面,否则为0 setctomiss:海点的零为 已转换为"缺少"

您现在可以使用它来屏蔽您的数据文件:

cdo mul your_data_file.nc seamask.nc masked_datafile.nc

但是,在某些情况下,我发现重新映射过程会在边缘周围留下"海洋"数据的痕迹,在这种情况下,为了更安全,您可以使用第二种方法:

解决方案2:

从Three服务器https://pae-paha.pacioos.hawaii.edu/thredds/ncss/dist2coast_1deg_land/dataset.html下载https://pae-paha.pacioos.hawaii.edu/thredds/ncss/dist2coast_1deg_land/dataset.html

分辨率为1公里的《到海洋的距离》netcdf数据文件

然后,为了安全起见,您可以掩蔽海洋一定距离内的任何点,但可能会掩蔽少量的陆地数据。

我首先将距离文件重新映射到目标分辨率:

cdo remapbil,your_data.nc distance.nc remap_dist.nc

然后进行掩码(例如,在这种情况下,海岸5公里内的所有点,海点在此文件中已"丢失")并相乘

cdo mul your_data.nc -gtc,5 remap_dist.nc masked_data.nc

如前所述,这更安全、更冗长,但可能会掩盖一些土地数据。