gmtsimplify

官方文档

gmtsimplify

简介

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

gmtsimplify 模块读取一个或多个数据文件,并使用 Douglas-Peucker 算法对复杂多边形进行简化,用曲线近似表示为一系列点并减少点的数量,并保证每个点与直线的偏离都在可容忍的范围内。

语法

gmt simplify [ table ] -Ttolerance [ -V[level] ] [ -bbinary ] [ -dnodata ] [ -eregexp ] [ -fflags ] [ -ggaps ] [ -hheaders ] [ -iflags ] [ -oflags ] [ -qflags ] [ -:[i|o] ] [ --PAR=value ]

必须选项

-Ttolerance

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

可选选项

table

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

-V[level] (more …)

设置 verbose 等级 [w]

-bi[ncols][type][w][+l|b] (more …)

设置二进制输入数据的格式

-bo[ncols][type][w][+l|b] (more …)

设置二进制输出的数据格式

-d[i|o]nodata (more …)

将输入数据中等于 nodata 的记录替换为 NaN,或将输出数据中值为 NaN 的记录替换为 nodata

-e[~]“pattern” | -e[~]/regexp/[i] (more …)

筛选或剔除匹配指定模式的数据记录

-f[i|o]colinfo (more …)

指定输入或输出列的数据类型

-g[a]x|y|d|X|Y|D|[col]zgap[+n|p] (more …)

确定数据或线段的间断

-h[i|o][n][+c][+d][+msegheader][+rremark][+ttitle] (more …)

跳过或生成指定数目的头段记录

-icols[+l][+sscale][+ooffset][,][,t[word]] (more …)

设置输入数据列及简单变换(0表示第一列,t 表示文本列)

-ocols[,…][,t[word]] (more …)

设置输出数据列(0表示第一列,t 表示文本列)

-q[i|o][~]rows[+ccol][+a|f|s] (more …)

筛选输入或输出的行或数据范围

-:[i|o] (more …)

交换输入或输出中的第一和第二列

-^-

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

-++

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

-? 或无参数

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

--PAR=value

临时修改GMT参数的值,可重复多次使用。参数列表见 gmt.conf

距离单位

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

示例

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

gmt simplify @GSHHS_h_Australia.txt -T500k

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

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

注意事项

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

BUGS

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

参考文献

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.