更改 netCDF 文件的网格大小
Change grid size of a netCDF file
假设我有 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
EDIT 2021:新视频可用...
要回答下面询问使用哪种方法的评论,有关这些插值方法的完整指南以及粗粒度数据时您必须注意的有关子采样的问题,you can refer to my "regridding and interpolation" video guide on 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
假设我有 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
EDIT 2021:新视频可用...
要回答下面询问使用哪种方法的评论,有关这些插值方法的完整指南以及粗粒度数据时您必须注意的有关子采样的问题,you can refer to my "regridding and interpolation" video guide on 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