✍️ 田冬冬 , 朱邓达 , 周茂 • 📅 2025-07-16

# grdsample

官方文档:

  grdsample

简介:

  对网格文件做重采样

grdsample 模块读取一个网格文件，并对其做插值以生成一个新的网格文件。 新旧网格文件可能的区别在于：

- 不同的配准方式（`-r` 或 `-T`）

- 不同的网格间隔或网格节点数（`-I`）

- 不同的网格范围（`-R`）

网格文件插值方式有多种，默认使用 bicubic 插值，可以使用 `-n` 选项设置其它插值方式。 该模块可以安全地将粗网格插值为细网格；反之，将细网格插值为粗网格时，则可能 存在混叠效应，因而需要在插值前使用 grdfft 或 grdfilter 对网格文件做滤波。

若省略 `-R` 选项，则输出网格与输入网格的区域范围相同；若省略 `-I` 选项， 则输出网格间距与输入网格间距相同。`-r` 和 `-T` 均可用于修改网格配准方式。 若省略这两个选项，则输出网格的配准方式与输入网格相同。

## 语法

gmt grdsample ingrid `-G` outgrid [ `-I` increment ] [ `-R` region ] [ `-T` ] [ `-V`[level] ] [ `-f` flags ] [ `-n` flags ] [ `-r` reg ] [ `-x`[[-]n] ] [ --PAR=value ]

## 输入数据

ingrid[=ID|?varname][+b band][+d divisor][+n invalid][+o offset][+s scale]

> 输入网格名。通过追加 =ID 可指定 网格格式 [默认为 =nf]。 追加 ?varname 可指定 NetCDF 变量 [默认为 GMT 找到的第一个 2-D 网格]。 参数详细介绍请参考 读 netCDF 文件。

## 必须选项

-G

-G outgrid[=ID][+d divisor][+n invalid][+o offset|a][+s scale|a][:driver[dataType][+c options]]

> 输出网格文件名。通过追加 =ID 可指定 网格格式。 参数详细介绍请参考 写 netCDF 文件。

## 可选选项

-I

-I xinc[+e|n][/yinc[+e|n]]

  指定X和Y方向的网格间隔

  - xinc 和 yinc 为 X 和 Y 方向的网格间隔。对于地理坐标，可以指定网格间隔单位 [默认单位为度]

  - +e 微调X和Y方向范围的最大值，使得其是网格间隔的整数倍（默认会微调 网格间隔以适应给定的数据范围）

  - +n 表明 xinc 和 yinc 不是网格间隔，而是X和Y方向的节点数。 此时会根据节点数、网格区域范围以及网格配准方式重新计算网格间隔。

  注意：

  - 若 yinc 设置为0，则表示其与 xinc 相同

  - 若使用 -R grdfile 选项，则网格间隔和配准方式已经根据网格文件自动初始化， 此时依然可以使用 -I 和 -r 覆盖相应的值

-R

-R xmin/xmax/ymin/ymax[+r][+u unit]

  指定数据范围。 (参数详细介绍)

> 若只使用 `-R` 选项，则等效于使用 grdcut 或 grdedit -S。

-T

-T

  交换网格文件的配准方式。即若输入是网格线配准，则输出为像素点配准；若输入 是像素点配准，则输出为网格线配准。注意，转换配准方式会导致高频信息的丢失， 详情见 网格配准。

-V

-V[level]

  设置 verbose 等级 [w]。 (参数详细介绍)

-f

-f[i|o]colinfo

  显式指定当前输入或输出数据中每一列的数据类型。 (参数详细介绍)

-n

-n[b|c|l|n][+a][+b BC][+c][+t threshold]

  设置网格文件的插值方式。 (参数详细介绍)

-r

-r[g|p]

  设置网格配置方式 [默认为网格线配准]。 (参数详细介绍)

-x

-x[[-]n]

  限制多核算法中能使用的核数（需要GMT开启OpenMP支持）。 (参数详细介绍)

-^ 或 -

  显示简短的帮助信息，包括模块简介和基本语法信息（Windows下只能使用 -）

-+ 或 +

  显示帮助信息，包括模块简介、基本语法以及模块特有选项的说明

-? 或无参数

  显示完整的帮助信息，包括模块简介、基本语法以及所有选项的说明

--PAR=value

  临时修改GMT参数的值，可重复多次使用。参数列表见 配置参数

## 网格值精度

不管输入数据的精度如何，创建网格文件的 GMT 程序将在内部以 4 字节浮点数组的形式保存网格。 这样做是为了节省内存，而且大多数实际数据都可以使用 4 字节浮点值存储。 具有更高精度的数据（即双精度值）将在 GMT 操作网格或写入新网格时失去该精度。 为了限制处理数据时的精度损失，用户应该始终考虑在处理之前对数据进行归一化。

## 网格重采样的后果

在对网格进行重采样或重新取样时，会使用多种算法（参见 -n）， 这些算法可能导致重采样后的数值出现一定的失真或意外结果。 使用样条函数进行重采样的一个常见现象是：新的采样值可能会略微超出原始网格的全局最小值或最大值。 如果这种超出范围的现象不可接受，可以在 -n 选项中添加 +c 参数， 以对重采样结果进行裁剪，从而确保输出的数值不会超过输入网格的最小值和最大值。

## 注意事项

- 网格插值过程中可能会导致插值后的值出现失真或意外值。例如，使用样条插值可能会导致 插值后的数据的最大最小值超过原始数据的最大最小值。若这一结果不可接受，可以通过 给 `-n` 选项加上 +c 以对超过原始数据最值的部分做裁剪。

- 若某个插值点不在输入数据的网格节点上，则插值时若该节点周围的节点值为NaN，则 该节点的值也会被插值为NaN。默认的bicubic插值算法会生成连续的一阶导数但需要 周围4x4个节点。bilinear插值算法只需要周围的2x2个节点，但其只是零阶连续。 若光滑性很重要，则使用bicubic算法；若需要尽量避免NaN值的传播，则使用bilinear算法。

- 除了插值之外，还可以使用 grd2xyz 将网格数据转换为表数据，然后 将输出交给 surface 或 greenspline 重新网格化。

## 示例

将5x5分的数据采样成1x1分:

    gmt grdsample @earth_relief_05m -R0/20/0/20 -I1m -Gtopo_1m.nc

将网格线配准的网格文件修改为像素配准的网格文件:

    gmt grdsample @earth_relief_05m -T -Gpixel.nc

## 参考文献

Marks, K. M., and W. H. F. Smith, 2007, Some remarks on resolving seamounts in satellite gravity, Geophys. Res. Lett., 34 (L03307), https://doi.org/10.1029/2006GL028857.

## 相关模块

grdedit, grdfft, grdfilter, greenspline, surface