假设我制作了一个netCDF
文件,其中有很多零。我想对数据应用防毒面具,以便仅真正掩盖海洋中的区域,并保留陆地上的数据。
我的数据在陆地上有很多零(这是正确的),但在海洋上也有很多零(这是不正确的)。
我本可以使用cdo setmissval,nan input.nc output.nc
,但是那也将土地上的值更改为NaN
。
有人对此有任何(好的)解决方案吗?
答案 0 :(得分:0)
这个问题已经在这里提出:Create a NetCDF file with data masked to retain land points only
因此,基本上,您可以使用内置的地形功能来构建陆地-海洋面具,然后将所有海洋点设置为丢失:
cdo -f nc setctomiss,0 -gtc,0 -remapcon,your_data_file.nc -topo seamask.nc
您现在可以使用它来屏蔽数据文件:
cdo mul your_data_file.nc seamask.nc masked_datafile.nc
但是,在某些情况下,我发现重新映射过程会在边缘留下“海洋”数据痕迹,在这种情况下,为了安全起见,您可以使用第二种方法:
从以下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
如前所述,这比较安全一些,有些困难,但是可能会掩盖一些陆地数据。