更改网络 CDF 文件的网格大小



假设我有 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 文件。

您可以使用 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 

编辑 2021:新视频可用...

要回答下面询问使用哪种方法的评论,有关这些插值方法的完整指南以及在粗粒度数据时必须注意的有关子采样的问题,您可以参考我在 youtube 上的"重新网格化和插值"视频指南。

通常,如果从高分辨率到低分辨率("粗格网")的插值超过 2 倍,则不希望使用双线性插值,因为它实质上会对字段进行子采样。这对于非光滑、高度异质的领域(如降水)尤其成问题。在这些情况下,我总是建议使用保守的方法(remapcon或remapcon2)。 有关详细信息,请参阅我的视频指南。

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

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