更改 netCDF 文件的网格大小

Posted

技术标签:

【中文标题】更改 netCDF 文件的网格大小【英文标题】:Change grid size of a netCDF file 【发布时间】:2019-09-08 19:32:25 【问题描述】:

假设我有 2 个 netCDF 数据文件,其中包含同一地区(如南美、非洲等)的数据,但网格大小不同,分别为 0.5 度 x 0.5 度和 1.0 度 x 1.0 度。 我想将其网格大小增加或减少到不同的值,例如 0.25 x 0.25 或 1.0 x 1.0,以便我可以轻松地将其用于栅格计算和比较等。

有没有办法使用任何 bash 脚本、CDO 等来做到这一点?

可以从这里下载示例数据。 https://www.dropbox.com/sh/0vdfn20p355st3i/AABKYO4do_raGHC34VnsXGPqa?dl

是否可以采用不同的方法,例如双线性插值或三次插值? 使用 ArcGIS 和其他软件很容易做到这一点,但是对于具有大型数据集的大型 netCDF 文件,有没有办法做到这一点。 假设这只是数据的一个子集。我稍后将转换的是一整套年度数据。

生成的文件应该是一个 .nc 文件,其网格大小由用户定义。

【问题讨论】:

【参考方案1】:

您可以使用 cdo 重新映射网格,例如到您可以使用的常规 1 度网格:

cdo remapcon,r360x180 input.nc output.nc

除了保守的一阶重映射 (remapcon),其他选项还有:

remapbil : bilinear interpolation
remapnn  : nearest neighbour interpolation
remapcon2 : 2nd order conservative remapping

如果您愿意,也可以将一个文件重新映射到另一个文件中使用的网格:

cdo remapcon,my_target_file.nc in.nc out.nc 

EDIT 2021:有新视频可用...

要回答下面询问使用哪种方法的评论,有关这些插值方法的完整指南以及粗粒度数据时您必须注意的二次采样问题,you can refer to my "regridding and interpolation" video guide on youtube.

一般来说,如果您从高分辨率到低分辨率(“粗网格”)插值超过 2 倍,希望使用双线性插值,因为它本质上会对场地。这对于非平滑、高度异质的领域(如降水)尤其成问题。在这些情况下,我总是建议使用保守的方法(remapcon 或 remapcon2)。有关详细信息,请参阅我的视频指南。

另一个速度提示是,如果您对许多输入文件执行相同的插值过程具有相同的分辨率,那么您可以使用 genbil、gencon 等计算一次插值权重,然后使用循环中的文件执行重新映射功能。这要快得多,因为权重的生成是 remapcon 的缓慢部分

【讨论】:

谢谢你,阿德里安。在增加或减少光栅文件的网格大小时,我总是对使用哪种方法感到困惑(因为在更改光栅大小的情况下最终结果会有很大差异)。当您增加栅格大小和减小栅格大小时,哪一个最适合使用或您可能知道的任何手规则?【参考方案2】:

NCO 的ncremap 也有一个单线解决方案。考虑将a.nc 重新网格化为与b.nc 在同一个网格上。我们将答案命名为c.nc(这是重新网格化的a.nc)。

ncremap -d b.nc a.nc c.nc

要选择保守而不是双线性插值(默认),请使用-a

ncremap -a conserve -d b.nc a.nc c.nc

【讨论】:

以上是关于更改 netCDF 文件的网格大小的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历 netcdf 文件并运行计算 - Python 或 R

如何在 ggplot2 中正确绘制投影网格数据?

如何持久化 ExtJS 数据网格列隐藏/显示/移动/调整大小?

大型网格数据集的存储

protel 99 设计图纸大小网格怎么设置

在容器 Kendo 窗口调整大小时动态更改 Kendo Grid 行的高度