✍️ 周茂 • 📅 2026-01-12

# sphinterpolate

官方文档:

  sphinterpolate

简介:

  球面数据的球面张力网格化

sphinterpolate 读取 lon，lat，z 形式的文件，进行 Delaunay 三角剖分并作球面张力插值。 通过 `-Q` 选项可以使用不同的插值方法，例如选择局部或全局梯度估计，或者优化张力选择以满足四个准则之一。 所使用的算法是 STRIPACK [Renka, 1997a] 和 SSRFPACK [Renka, 1997b]。

## 语法

gmt sphinterpolate [ table ] `-G` grdfile `-I` increment `-R` region [ `-D`[east] ] [ `-Q` g|l|p|s[args] ] [ `-T` ] [ `-V`[level] ] [ `-Z` ] [ `-bi` binary ] [ `-di` nodata[+c col] ] [ `-e` regexp ] [ `-h` headers ] [ `-i` flags ] [ `-qi` flags ] [ `-r` reg ] [ `-s` flags ] [ `-:`[i|o] ] [ --PAR=value ]

## 输入数据

table

  一个或多个ASCII或二进制表数据。若不提供表数据，则会从标准输入中读取。

## 必须选项

-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]

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

## 可选选项

-D

-D[east]

  用于删掉重复点 [默认不删除，即假定数据中不存在重复]；通过追加 east 参数表示不对在此经度 上的点做重复检查

-Q

-Q g|l|p|s[args]

  设置用于内插的计算张力因子的方法，用来保证局部形状特征或满足弧段约束 [默认没有张力]

  - p 分段线性插值，不施加张力

  - l 使用局部梯度估计进行平滑插值

  - g[N/M/U] 使用全局梯度估计进行平滑插值。N/M/U 中 N 为使用可变 张力时，迭代次数 [3]; M 确定全局梯度时使用的 Gauss-Seidel 迭代次数 [10]; U 最后一次迭代中梯度变化的阈值 [0.01]

  - s[E/U/N] 平滑。E/U/N [/0/0/3] 中 E 为典型数据值中预期方差； U 为数据偏差的加权平方和的上限。 N 为使用可变张力时的迭代次数。

-T

-T

  使用可变张力; 使用 -Qp 选项时，忽略该选项

-V

-V[level]

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

-Z

-Z

  在内插前，使用最大数据范围 1/(max-min) 进行数据缩放 [默认不缩放]

-bi

-bi[ncols][type][w][+l|b]

  控制二进制文件的输入格式。 (参数详细介绍)

-di

-di nodata

  将输入数据某些特定值当作NaN。 (参数详细介绍)

-e

-e[~]"pattern" | -e[~]/regexp/[i]

  筛选或剔除匹配指定模式的数据记录。 (参数详细介绍)

-h

-h[i|o][n][+c][+d][+m segheader][+r remark][+t title]

  在读/写数据时跳过文件开头的若干个记录。 (参数详细介绍)

-i

-i cols[+l][+s scale][+o offset][,...][,t[word]]

  对输入的数据进行列选择以及简单的代数运算。 (参数详细介绍)

-qi

-qi[~]rows[+c col][+a|f|s]

  筛选输入的行或数据范围。 (参数详细介绍)

-r

-r[g|p]

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

-s

-s[cols][+a|+r]

  设置 NaN 记录的处理方式。 (参数详细介绍)

-:

-:[i|o]

  交换输入或输出数据的前两列。 (参数详细介绍)

-^ 或 -

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

-+ 或 +

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

-? 或无参数

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

--PAR=value

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

## ASCII 格式精度

ASCII 格式输出数据通过 gmt.conf 配置文件控制。控制经纬度格式的参数为 FORMAT_GEO_OUT ；控制绝对时间的的参数包括 FORMAT_DATE_OUT 和 FORMAT_CLOCK_OUT ；普通浮点数通过参数 FORMAT_FLOAT_OUT 控制。上述格式控制可能会导致精度损失，这会在下游计算中导致一些问题。 如果用户需要保证数据精度，则应考虑将数据写为二进制文件，或者使用 FORMAT_FLOAT_OUT 指定更多的有效数字。

## 示例

采用分段线性插值由 `mars370d.txt` 生成全球 1 度分辨率网格

    gmt begin mars
        gmt sphinterpolate @mars370d.txt -Rg -I1 -Qp -Gmars.nc
        gmt grdimage mars.nc -JH0/4.5i -B30g30
    gmt end show

使用无张力的插值，由 `testdata.txt` 生成全球 1 度分辨率网格

    gmt sphinterpolate testdata.txt -Rg -I1 -Gsolution.nc

## 注意事项

STRIPACK 算法需要输入中不包含重复点。 blockmean 等模块可以将多个接近的点合并成单个点。sphinterpolate 的 `-D` 选项也可以删除重复点，但是这通过对点的坐标精确比较实现，对大型 数据集来说，运行可能会很慢。STRIPACK 算法在检测到重复点时，会直接退出执行

## 参考文献

Renka, R, J., 1997, Algorithm 772: STRIPACK: Delaunay Triangulation and Voronoi Diagram on the Surface of a Sphere, AMC Trans. Math. Software, 23(3), 416-434.

Renka, R, J,, 1997, Algorithm 773: SSRFPACK: Interpolation of scattered data on the Surface of a Sphere with a surface under tension, AMC Trans. Math. Software, 23(3), 435-442.

## 相关模块

greenspline, nearneighbor, sphdistance, sphtriangulate, surface, triangulate