更改netCDF文件的网格大小

时间:2019-04-18 12:48:49

标签: python-3.x bash grid netcdf netcdf4

让我们假设我有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=0

是否可以采用其他方法(例如双线性插值或三次插值)? 使用ArcGIS和其他软件,这非常容易,但是有一种方法可以对包含大型数据集的大型netCDF文件进行处理。 假设这只是数据的一个子集。我以后要转换的是一整套年度数据。

结果文件应为.nc文件,其网格大小由用户定义。

2 个答案:

答案 0 :(得分:5)

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

cdo remapcon,r360x180 input.nc output.nc

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

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

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

编辑:回答下面的评论。通常,如果您要从高分辨率插值到低分辨率(“粗网格化”),则不要使用双线性插值,因为它将本质上对场进行二次采样。对于非光滑,高度非均质的领域(例如降水),这尤其成问题。在那些情况下,我总是建议使用保守的方法(remapcon或remapcon2)。这些方法要慢得多,所以我经常在测试脚本速度时使用双线性,然后切换到remapcon进行最终运行。

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

答案 1 :(得分:3)

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