【问题标题】:Create a NetCDF file with data masked to retain land points only创建一个带有掩码数据的 NetCDF 文件以仅保留陆点
【发布时间】:2016-12-27 17:58:54
【问题描述】:

我在 grads 中使用 basemap.gs 脚本屏蔽了 NetCDF 文件。这是我使用面具得到的结果:

所以,我想获得一个仅包含大陆数据的 NetCDF 文件,有人可以帮我吗?

【问题讨论】:

    标签: mask netcdf cdo-climate grads


    【解决方案1】:

    由于您已经屏蔽了非大陆值,因此该过程实际上相当简单。有一个名为“sdfwrite”的命令可以将grads中定义的变量写入文件。代码会是这样的:

    define data = <insert expression for masked out data here>
    set sdfwrite out.nc
    sdfwrite data
    

    *确保删除尖括号;那些只是为了展示

    将这些输入到 grads 将 1) 分配内存以将显示的数据保存在变量“data”中 2) 将输出文件的名称设置为“out.nc”(您当然可以将其更改为您喜欢的任何内容) , 和 3) 将变量“data”中的信息写入 out.nc 文件。

    现在据我所知,没有办法简单地将屏蔽的值不写入文件,但是这样,它们都将被写入为零/未定义的值。

    sdfwrite documentation

    希望这有帮助!

    【讨论】:

    • 实际上,重新阅读问题我意识到这实际上是正确的答案。问题只是如何写出毕业生的 netcdf 文件。问题标题非常混乱,因为它包含多余的信息。
    【解决方案2】:

    如果我正确理解了这个问题,希望有一个 netcdf 文件,其中所有值都设置为在海点上缺失(即 _Fillvalue)。如果是这样,命令行有两种解决方案:

    解决方案 1:

    一种方法是使用 CDO 创建海陆掩码,然后将所有海点设置为缺失:

    cdo -f nc2 setctomiss,0 -gtc,0 -remapcon,your_data_.nc -topo seamask.nc
    
    • 其中 remapcon 将地形重新映射到数据文件的域和分辨率。
    • 当内置地形高于海平面时,gtc 产生 1。
    • 然后 setctomiss 将所有“零”点设置为缺失。

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

    cdo mul datafile.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
    

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

    编辑 2021:I've just uploaded a youtube video guide on this topic to provide further details.

    【讨论】:

      猜你喜欢
      • 2022-12-09
      • 2018-07-23
      • 2021-05-17
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 2011-10-31
      相关资源
      最近更新 更多