✍️ 周茂 • 📅 2025-12-30

# sphtriangulate

官方文档:

  sphtriangulate

简介:

  创建球面 Delaunay 三角网或 Voronoi 图

Delaunay 三角网 是 Delaunay 三角化的结果。Delaunay 三角化是一种空间三角剖分算法。 该算法的优点在于能避免三角网结果中出现“极瘦” 的三角形。

Voronoi 图 又称泰森多边形，由 Delaunay 三角网中连接两相邻点线段的中垂线组成的连续 多边形组成。

sphtriangulate 读取一个或者多个经纬度坐标文件并进行球面 Delaunay 三角化。-Qv 选项可进步一生成 Voronoi 图。通常，多边形输出结果为闭合的并且可填充，使用 `-T` 选项 则输出构成多边形的弧段而非多边形。

## 语法

gmt sphtriangulate [ table ] [ `-A` ] [ `-C` ] [ `-D` ] [ `-L` unit ] [ `-N` file ] [ `-Q` d|v ] [ `-T` ] [ `-V`[level] ] [ `-bi` binary ] [ `-bo` binary ] [ `-d` nodata[+c col] ] [ `-e` regexp ] [ `-h` headers ] [ `-i` flags ] [ `-j` flags ] [ `-qi` flags ] [ `-r` reg ] [ `-s` flags ] [ `-:`[i|o] ] [ --PAR=value ]

## 输入数据

table

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

## 可选选项

-A

-A

  计算球面三角的面积或多边形（见 `-Q` ）的面积并输出到段信息中 [默认不计算面积]。 面积单位见 `-L` 选项。

-C

-C

  用于节省内存。该模块默认在运算过程中同时保存地理坐标和笛卡尔坐标，但对于大型数据 集，这可能会占据很大内存，因此使用该选项可以只保留其中一种坐标以节省内存，必要的 时候 GMT 会自动实现坐标转换。

-D

-D

  用于删掉重复点 [默认不删除]。

-L

-L unit

  指定距离和面积计算的单位，可选项包括 e (m)， f (foot)， k (km)， M (mile)，n (nautical mile)，u (survey foot)，或 d (spherical degree)。 除非设置了 -je ，否则使用球面近似距离；在这种情况下，计算面积前将纬度转换为 自定义的纬度。当单位设置为度时，面积的结果为球面度。

-N

-N file

  将多边形信息写到 file 文件中。对于Delaunay 三角网，相关信息包括：每个三角形三个 定点的编号（若设置 `-A` 还包括三角形面积）；对于 Voronoi ，包括节点坐标（ `-A` ） 选项使用同上。如果输出文件格式为 ASCII，这些信息都显示在段信息中，并可将整个结果输出 到标准输出，无需使用 `-N` 选项；如果输出文件为二进制文件，则 `-N` 选项是必须的。

-Q

-Q d|v

  d 选项为计算 Delaunay 三角网，v 选项为计算 Voronoi 图 [默认使用 d ]。

  注意：如果激活了 `-bo` （二进制输出），则可以使用 `-N` 指定一个单独的文件，用于写入通常情况下输出的多边形信息。

-T

-T

  将结果输出为弧段 [默认输出闭合的三角形或者多边形]。当使用 `-A` 选项时，同时 计算弧段的长度并写到段信息中，单位见 `-L` 选项。

-V

-V[level]

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

-bi

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

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

-bo

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

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

-d

-d[i|o]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]]

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

-j

-je|f|g

  设置球面距离的计算方式。 (参数详细介绍)

-qi

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

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

-s

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

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

-:

-:[i|o]

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

-r

-r[g|p]

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

-^ 或 -

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

-+ 或 +

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

-? 或无参数

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

--PAR=value

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

## ASCII 格式精度

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

## 示例

从远程数据文件 `hotspots.txt` 中创建球面三角网，并绘制

    gmt sphtriangulate @hotspots.txt -Qd -T | gmt plot -Rg -JG-120/-30/7i -Bafg -W3p -pdf map

三角化 `testdata.txt` 中的点，创建 Voroni 图并绘制

    gmt sphtriangulate testdata.txt -Qv | gmt plot -Rg -JG30/30/6i -L -W1p -Bag -pdf testdata

基于包含多段记录的数据文件 `globalnodes.txt` 计算 Delaunay 三角网， 并计算每个三角形的面积，输出到段信息中

    gmt sphtriangulate globalnodes.txt -Qd -A > global_tri.txt

除上述示例外， GMT 官方示例 35 和 示例 48 也使用了该模块。

## 注意事项

多边形或三角形面积的计算使用了 STRIPACK 算法。该算法需要输入中不包含重复点。 blockmean 等模块可以将多个接近的点合并成单个点。sphtriangulate 的 `-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.

## 相关模块

triangulate, sphdistance