✍️ 田冬冬 , 周茂 , 朱邓达 , 陈箫翰 • 📅 2026-01-13

# triangulate

官方文档:

  triangulate

简介:

  笛卡尔数据的 Delaunay 三角剖分或 Voronoi 图和网格化

triangulate 读取表数据并进行 Delaunay 三角化，该三角化方法能最大程度地避免狭窄 的三角形。如果使用了 `-R` 和 `-J` 选项，则表明输入为地理坐标，首先使用投影， 然后执行三角化。默认情况下，输出组成每个三角形的点 ID，并输出到标准输出。ID 编号 为输入文件时，点的位置，从 0 开始计算。该模块同时可以创建一个多段数据文件，通过 管道传递给 plot 模块后可绘制三角网。如果设置了 `-G` 和 `-I` 选项，则 基于平面三角形计算网格。具体算法来自 Watson (1982) [默认] 或 Shewchuk (1996) ， 此选择是在 GMT 安装期间确定的，通过 `gmt get GMT_TRIANGULATE` 可查看具体安装了 哪种算法，如果安装了 Shewchuk 算法，还可以进一步计算 Voronoi 图，并可选择自然最邻 近算法对数据进行网格化。

注意：对于全球范围或超大范围的地理数据，应该考虑使用 sphtriangulate ， 因为 triangulate 是笛卡尔坐标或小范围地理区域算子，无法识别周期性或极地边界条件。

## 语法

gmt triangulate [ table ] [ `-A` ] [ `-C` slpfile ] [ `-D` x|y ] [ `-E` empty ] [ `-G` outgrid ] [ `-I` increment ] [ `-J` parameters ] [ `-L` indexfile[+b] ] [ `-M` ] [ `-N` ] [ `-Q`[n] ] [ `-R` region ] [ `-S`[first][+z[a|l|m|p|u]][+n] ] [ `-T` ] [ `-V`[level] ] [ `-Z` ] [ `-bi` binary ] [ `-bo` binary ] [ `-d` nodata[+c col] ] [ `-e` regexp ] [ `-f` flags ] [ `-h` headers ] [ `-i` flags ] [ `-qi` flags ] [ `-r` reg ] [ `-s` flags ] [ `-w` flags ] [ `-:`[i|o] ] [ --PAR=value ]

## 输入数据

table

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

## 可选选项

-A

-A

  计算笛卡尔三角形的面积，并将面积追加到输出分段头中 [默认不计算面积]。需要使用 `-S` ，且不兼容 `-Q` 。

-C

-C slpfile

  读取坡度网格 slpfile （单位为度），并使用 CURVE 算法计算水深测量中传播的不确定性 (Zambo et al, 2016)。需要 `-G` 选项指定输出网格，但不需要 `-R` ，`-I` 等选项，这些 信息通过网格获取。该选项不能和 `-D`，`-M`，`-N`，`-Q`，`-S` 以及 `-T` 选项共同使用。

-D

-Dx|y

  在设置 `-G` 选项时，计算由平面面片（planar facets）表示的表面的 x 或 y 方向导数。

-E

-E empty

  使用 `-G` 选项时，设置空节点的值，默认为 NaN

-G

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

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

> 使用三角剖分将数据网格化为均匀网格（由 `-R` 和 `-I` 控制）。 插值是在原始坐标系中进行的，因此如果三角形靠近极点，最好在使用 triangulate 之前将所有数据投影到局部坐标系中，或者改用 sphtriangulate 。 对于自然最近邻网格化，必须添加 `-Q` n 。

-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 覆盖相应的值

-J

-J projection

  设置地图投影方式。 (参数详细介绍)

-L

-L indexfile[+b]

  指定包含先前计算好的 Delaunay 信息的文件的名称。 每条记录必须包含输入数据表 (table) 中一个三角形的三个节点编号 [默认使用 Delaunay 三角剖分计算这些信息]。 如果 indexfile 是二进制文件，且其读取方式与二进制输入数据表相同，则可以追加 +b 以加快读取速度 [默认以 ASCII 格式读取节点]。

-M

-M

  将输出的三角网以多段线的形式输出，中间以段信息分隔 [默认输出顶点索引]

-N

-N

  与 `-G` 选项同时使用，同时输出所有 Delaunay 顶点编号的三元组 [默认只输出网格]

-Q

-Q[n]

  改为输出 Voronoi 胞元的边 [默认输出 Delaunay 三角形的边]。 需要使用 `-R`，且仅在链接了 Shewchuk [1996] 库时可用。 注意，输出时将忽略 `-Z` 。追加 n 将这些边组合成封闭的 Voronoi 多边形。

-R

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

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

-S

-S[first][+z[a|l|m|p|u]][+n]

  将三角形作为多边形分段输出，各分段由包含节点编号 a-b-c 和 -Z polynumber 的分段头记录分隔。 如果使用了 +n 标志，将跳过 polynumber 和节点编号。 追加 first （ first 为整数），从 first 开始计数来报告多边形编号 [默认从零开始]。 本选项与 `-Q` 不兼容。 附加 +z 将 -Z zvalue 置于分段头中，其中 zvalue 是每个三角形的代表值。

  注意： +z 会自动使用 `-Z` 。可以使用以下附加设置：

  > - a ：选择平均值 [默认]

  > - l ：选择最小值

  > - m ：选择中位数

  > - p ：选择众数

  > - u ：选择最大值

-T

-T

  即使使用 `-G` 选项输出网格，仍然输出边或者多边形 [默认输出网格时不输出三角网或 Voronoi 多边形]。

-V

-V[level]

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

-Z

-Z

  读取 (x, y, z) 数据，使用 `-M` 或 `-S` （且未带 +z）时输出 z 。

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

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

-f

-f[i|o]colinfo

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

-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 记录的处理方式。 (参数详细介绍)

-w

-wy|a|w|d|h|m|s|c period[/phase][+c col]

  将输入坐标转换为循环坐标。 (参数详细介绍)

-:

-:[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 指定更多的有效数字。

## 网格值精度

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

## 点位于多边形内/外

为了确定点在多边形内，外或在边界上，GMT 会平衡数据类型以及多边形形状等因素来 确定算法。对于笛卡尔坐标，GMT 使用 non-zero winding 算法，该算法非常快。对于 地理坐标，如果多边形不包括两极点且多边形的经度范围不超过 360 度，同样使用该 算法。否则，GMT 会采用 full spherical ray-shooting 方法。

## 示例

对 `samples.xyz` 进行三角化，在二进制文件中保存三角网结果，并创建网格

    gmt triangulate samples.xyz -bo -R0/30/0/30 -I2 -Gsurf.nc > samples.ijk

使用 15 cm 的墨卡托图绘制基于上述同样数据生成的三角网

    gmt triangulate samples.xyz -M -R-100/-90/30/34 -JM15c |\
        gmt plot -R-100/-90/30/34 -JM15c -W0.5p -B1 -pdf network

同样使用上述数据，但绘制 Voronoi 图

    gmt triangulate samples.xyz -M -Q -R-100/-90/30/34 -JM15c |\
        gmt plot -R-100/-90/30/34 -JM15c -W0.5p -B1 -pdf cells

将 Voronoi 的线段组合成多边形并根据他们的 ID 填充

    gmt triangulate samples.xyz -M -Qn -R-100/-90/30/34 -JM15c | \
        gmt plot -R-100/-90/30/34 -JM15c -W0.5p+cf -L -B1 -Ccolors.cpt -L -pdf polygons

使用自然最邻近算法进行网格化

    gmt triangulate samples.xyz -Gnnn.nc -Qn -R-100/-90/30/34 -I0.5

## 说明

水深网格的不确定度传播需要水平和垂直方向的不确定度，并根据局部坡度进行加权。 更多详情请参阅 Zambo et al. [2014] 和 Zhou and Liu [2004] 参考文献。

## 参考文献

Shewchuk, J. R., 1996, Triangle: Engineering a 2D Quality Mesh Generator and Delaunay Triangulator, First Workshop on Applied Computational Geometry (Philadelphia, PA), 124-133, ACM, May 1996.

Watson, D. F., 1982, Acord: Automatic contouring of raw data, Comp. & Geosci., 8, 97-101.

Zambo, S., Elmore, P. A., Bourgeois, B. S., and Perkins, A. L., 2016, Uncertainty estimation for sparse data gridding algorithms, Proceedings of the U.S. Hydro Conference,National Harbor, MD, 16-19 March 2015.

Zhou, Q., and Liu, X., 2004, Error analysis on grid-based slope and aspect algorithms, Photogrammetric Eng. & Remote Sensing, 70 (8), 957-962.

Shewchuk's Homepage

## 相关模块

greenspline, nearneighbor, contour, sphdistance, sphinterpolate, sphtriangulate, surface