0

假设我制作了一个netCDF文件,其中有很多零。我想对数据应用一个海面掩码,这样只有海中的区域被真正掩蔽,而陆地上的数据被保留。

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

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

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

4

1 回答 1

1

这个问题已经在这里提出: 创建一个 NetCDF 文件,数据被屏蔽以仅保留土地点

解决方案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

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

于 2020-01-14T08:05:02.663 回答