✍️ 田冬冬 , 周茂 , 陈箫翰 • 📅 2025-08-11

# simplify

官方文档:

  simplify

简介:

  使用Douglas-Peucker算法对线段做简化

simplify 模块读取一个或多个数据文件，并使用 Douglas-Peucker 算法对复杂多边形 进行简化，用曲线近似表示为一系列点并减少点的数量，并保证每个点与直线的偏离都在可容忍的范围内。 请访问以下网站以直观了解该算法的工作原理：(https://en.wikipedia.org/wiki/Ramer–Douglas–Peucker_algorithm)。

## 语法

gmt simplify [ table ] `-T` tolerance [ `-V`[level] ] [ `-bi` binary ] [ `-bo` binary ] [ `-d` nodata[+c col] ] [ `-e` regexp ] [ `-f` flags ] [ `-g` gaps ] [ `-h` headers ] [ `-i` flags ] [ `-o` flags ] [ `-q` flags ] [ `-:`[i|o] ] [ --PAR=value ]

## 输入数据

table

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

## 必须选项

-T

-T tolerance

  指定最大所能容忍的误差，即任意数据点与简化后的线段间的距离小于该值。 默认单位为用户单位。对于地理数据（例如海岸线）可以指定其它 距离单位 。

## 可选选项

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

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

-f

-f[i|o]colinfo

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

-g

-g[a]x|y|d|X|Y|D|[col]z gap[+n|p]

  确定数据或线段的间断。 (参数详细介绍)

-h

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

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

-i

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

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

-o

-o cols[,...][,t[word]]

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

-q

-q[i|o][~]rows[+c col][+a|f|s]

  对输入或输出的行进行筛选，该选项在一定程度上可以代替 gawk 的某些功能。 (参数详细介绍)

-:

-:[i|o]

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

-^ 或 -

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

-+ 或 +

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

-? 或无参数

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

--PAR=value

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

## 距离单位

GMT支持多种不同的距离单位，以及三种不同的球面距离计算方式。 详情见 单位 和 -j 选项。

## ASCII 格式精度

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

## 示例

将澳大利亚的高精度海岸线数据简化，容忍误差为500km:

    gmt simplify @GSHHS_h_Australia.txt -T500k

将笛卡尔线段简化，可容忍误差为0.45:

    gmt simplify xylines.d -T0.45 > new_xylines.d

## 注意事项

simplify 对于线段和闭合多边形的处理方式略有区别。 显式闭合的线段（即线段的首尾坐标相同）会被认为是闭合多边形， 否则视为线段。被当作多边形的线段可以被简化为无面积的3点多边形， 其不会被输出。

## BUGS

Douglas-Peucker 算法的已知问题是交叉点的处理，即其无法保证简化后的线段不自我交叉， 多个线段也可能互相交叉。此外，当前的算法实现只支持平面距离。

## 参考文献

Douglas, D. H., and T. K. Peucker, Algorithms for the reduction of the number of points required to represent a digitized line of its caricature, Can. Cartogr., 10, 112-122, 1973.

## 相关模块

connect, convert, select