simplify
- 官方文档:
- 简介:
使用Douglas-Peucker算法对线段做简化
simplify 模块读取一个或多个数据文件,并使用 Douglas-Peucker 算法对复杂多边形 进行简化,用曲线近似表示为一系列点并减少点的数量,并保证每个点与直线的偏离都在可容忍的范围内。
语法
gmt simplify
[ table ]
-Ttolerance
[ -V[level] ]
[ -bbinary ]
[ -dnodata[+ccol] ]
[ -eregexp ]
[ -fflags ]
[ -ggaps ]
[ -hheaders ]
[ -iflags ]
[ -oflags ]
[ -qflags ]
[ -:[i|o] ]
[ --PAR=value ]
必须选项
- -T
- -Ttolerance
指定最大所能容忍的误差,即任意数据点与简化后的线段间的距离小于该值。 默认单位为用户单位。对于地理数据(例如海岸线)可以指定其它 距离单位。
可选选项
- table
一个或多个ASCII或二进制表数据。若不提供表数据,则会从标准输入中读取。
- -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]zgap[+n|p]
确定数据或线段的间断。 (参数详细介绍)
- -h
- -h[i|o][n][+c][+d][+msegheader][+rremark][+ttitle]
在读/写数据时跳过文件开头的若干个记录。 (参数详细介绍)
- -i
- -icols[+l][+sscale][+ooffset][,…][,t[word]]
对输入的数据进行列选择以及简单的代数运算。 (参数详细介绍)
- -o
- -ocols[,…][,t[word]]
对输出的数据进行列选择以及简单的代数运算。 (参数详细介绍)
- -q
- -q[i|o][~]rows[+ccol][+a|f|s]
对输入或输出的行进行筛选,该选项在一定程度上可以代替 gawk 的某些功能。 (参数详细介绍)
- -:
- -:[i|o]
交换输入或输出数据的前两列。 (参数详细介绍)
- -^ 或 -
显示简短的帮助信息,包括模块简介和基本语法信息(Windows下只能使用 -)
- -+ 或 +
显示帮助信息,包括模块简介、基本语法以及模块特有选项的说明
- -? 或无参数
显示完整的帮助信息,包括模块简介、基本语法以及所有选项的说明
- --PAR=value
临时修改GMT参数的值,可重复多次使用。参数列表见 配置参数
距离单位
示例
将澳大利亚的高精度海岸线数据简化,容忍误差为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.