如何使用CDO在NetCDF文件上应用Sea Mask

时间:2019-06-18 13:10:34

标签: mask netcdf4 cdo

假设我制作了一个netCDF文件,其中有很多零。我想对数据应用防毒面具,以便仅真正掩盖海洋中的区域,并保留陆地上的数据。

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

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

有人对此有任何(好的)解决方案吗?

1 个答案:

答案 0 :(得分:0)

这个问题已经在这里提出:Create a NetCDF file with data masked to retain land points only

解决方案1:

因此,基本上,您可以使用内置的地形功能来构建陆地-海洋面具,然后将所有海洋点设置为丢失:

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:

从以下thredds服务器上以1公里的分辨率下载netcdf数据文件,以“到海洋的距离”:https://pae-paha.pacioos.hawaii.edu/thredds/ncss/dist2coast_1deg_land/dataset.html

然后,您可以掩盖海洋一定距离内的任何点以确保安全,但可能会掩盖少量的陆地数据。

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

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

然后添加遮罩(例如,在这种情况下,距离海岸5公里以内的所有点都已经“丢失”),并相乘

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

如前所述,这比较安全一些,有些困难,但是可能会掩盖一些陆地数据。