gmtspatial

贡献者:

周茂


官方文档:

gmtspatial

简介:

对点,线和多边形进行地理空间操作

gmtspatial 读取一个或者多个文件,文件中包含线或多边形等特征,对这些特性进行操作,包括:面积计算,多边形相交等。

语法

gmt spatial [ table ] [ -A[amin_dist][unit]] [ -C ] [ -D[+aamax][+c|Ccmax][+ddmax][+ffile][+p][+sfact] ] [ -E+p|+n ] [ -F[l] ] [ -I[e|i] ] [ -L|dist/noise/offset ] [ -Npfile[+a][+pstart][+r][+z] ] [ -Q[unit][+cmin[/max]][+h][+l][+p][+s[a|d]] ] [ -Rregion ] [ -Sbwidth|h|i|u|s|j ] [ -T[clippolygon] ] [ -V[level] ] [ -Wdist[unit][+f|l] ] [ -aflags ] [ -bbinary ] [ -dnodata[+ccol] ] [ -eregexp ] [ -fflags ] [ -ggaps ] [ -hheaders ] [ -iflags ] [ -jflags ] [ -oflags ] [ -qflags ] [ -sflags ] [ -:[i|o] ] [ --PAR=value ]

必选选项

table

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

可选选项

-A[amin_dist][unit]

空间最邻近分析:计算每个点的最邻近点,并报告点对之间的距离和 ID (ID 是以输入顺序从 0 开始计数)。-Aa 选项用来筛选距离大于 min_dist 的点对,输出数据可能会进行一定的平均。如果输出的 ID 为负数,则表示原始的点被平均,这里的 ID 的绝对值为取平均过程中第一个点的 ID。

:输入数据中假定包含 (lon, lat) 或者 (x, y),此外还可以包括 z 值和权重两列,在进行平均时,会同时计算位置和 z 值的加权平均值。

-C

-R 选项同时使用,以 -R 确定的范围裁剪多边形,输出结果为闭合的多边形( -T 选项可以使用多边形裁剪多边形)

-D[+aamax][+c|Ccmax][+ddmax][+ffile][+p][+sfact]

检查输入线或者多边形之间是否存在重复,若使用 +f 则检查该选项给定的文件中的元素是否与输入文件中的元素存在重复。在确定是否重复的时候,GMT 会自动考虑精确匹配(相同的个数和坐标),近似匹配(两个特征之间最近点之间的平均小于阈值)以及某些特征是否反转。

  • +aamax 设置多边形之间面积差的阈值,若大于 amax ,认为不想等,小于 amax ,则认为近似想等,默认值为 0.01

  • +c|Ccmax 两特征之间的平均距离处除平均长度称为相近比 ,设置两条线之间的相近比阈值 cmax ,若两条线的平均相近比大于该值认为两条线为重复,反之;默认值为 0.01 。 C 选项则使用中值而非平均值

  • +ddmax 设置点距阈值 dmax ,大于该值认为为重复点,默认值为 0

  • +p 默认情况下会计算一条线和另一条线上所有点之间的距离,如果使用 +p 选项,则只考虑在另一条线(非延长线)有垂直投影的点,这样会减小一定的计算量

  • +sfact 设置两条线的长度比值的阈值为 fact ,默认为 2,若大于值,则两条线分别为子集和超集。

在进行重复检查时,根据特征的种类,GMT 将会自动选取上述选项中的几项进行判断

-E+p|n

重置所有多边形顶点的顺序。 +p 改为顺时针, +n 改为逆时针。

-F[l]

强制输入数据变为多边形,如果输入为多边形,则自动实现闭合。使用 l 选项来确保输入的线段不被识别为多边形

-I[e|i]

确定所有多边形对之间的相交点的位置。i 只计算自相交的多边形的相交点的位置, e 只计算不同多边形之间的相交点的位置 [默认为都计算]。输出将包括相交点的坐标,相对于整段线长度的位置以及两个多边形的名称。

-Ldist/noise/offset

删除经数字化得到的多边形在 -R 边界上的线,通过设置 dist (单位为 m ,默认值为 0),坐标误差 noise [1e-10] 以及最大的偏移量 offset [1e-10] 等参数的极限值来判断是否位于边界上。

-Npfile[+a][+pstart][+r][+z]

确定点是否在多边形内。如果在多边形的内部,则报告对应的多边形的 ID, pfile 为报告的多边形结果。

  • +a 表示某条线或多边形的所有点均位于多边形内

  • +r 不输出表数据,只报告对应的多边形

  • +p 设置初始运行的多边形的 ID 为 start ,并在运行中对多边形 ID 进行递增,默认 start 为 0。除 +p 选项为,还可使用 -Z 选项或者 -L 选项在头段信息中设置多边形的 ID

  • +z 将 ID 作为一列输出,默认只写到头部信息中

-Q[unit][+cmin[/max]][+h][+l][+p][+s[a|d]]

测量多边形的面积或者线的长度。对于多边形,还计算其中心位置;对于线,则计算其一半长度的位置。面积的计算取决于投影参数 PROJ_ELLIPSOID ,应该使用最贴合的椭球以获得准确的结果。

  • +h 将多边形面积写到段信息中 [默认输出到标准输出]

  • +cmin[/max] 筛选线长度或多边形的面积为 minmax 的目标;如果不指定 max ,则默认为无穷大

  • +s[a|d] 对线长度或多边形面积进行排序, a 为升序, d 为降序,默认为升序

  • +p 将多边形闭合从而将所有的输入视为多边形

  • +l 将输入视为线而不是多边形,即使是闭合的多边形也视为线

-Rxmin/xmax/ymin/ymax[+r][+uunit] (more …)

指定数据范围

-Sbwidth|h|i|j|s|u

对多边形进行一定处理。

  • -Sbwidth 计算缓冲多边形,width 为缓冲区的宽度

  • -Sh 对带孔的多边形进行标记并重置其顶点顺序(只是为了方便绘制)

  • -Si 返回多边形的交集,结果是闭合的

  • -Su 返回多边形的并,结果也是闭合的

  • -Ss 使用日期变更线(180 度经线)剖分多边形

  • -Sj 将使用日期变更线剖分后的多边形合并

注1 :只有 -Sb, -Sh-Ss 已经实现,其他选项还未实现。

注2-Sb 是纯笛卡尔运算,因此 width 的单位和数据单位相同。对地理坐标而言,width 必须是以度为单位;或者将坐标投影后进行该操作,再转换为地理坐标。

-T[clippolygon]

使用给定的多边形 clippolygon 裁剪多边形,结果可能不是闭合的多边形。与 -R 选项同时使用时,同时参与裁剪。

-V[level] (more …)

设置 verbose 等级 [w]

-Wdist[unit][+f|+l]

对多段线的第一段和最后一段以其原本的方位角进行延长, dist 为延长距离, unit 为单位(仅限地理坐标)。 对于地理坐标,可以使用 distf[unit]/distl[unit] 语法分别设置起始段和结尾段延长的距离和单位。 +f+l 分别表示只在起始段或者结尾段延长,默认在两端都延长。

-acol=name[,…] (more …)

设置非空间数据项与数据列之间的对应关系

-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 表示文本列)

-je|f|g (more …)

设置球面距离的计算方式

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

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

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

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

-s[cols][+a|+r] (more …)

设置 NaN 记录的处理方式

-:[i|o] (more …)

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

-^-

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

-++

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

-? 或无参数

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

--PAR=value

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

距离单位

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

点位于多边形内/外

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

示例

确定远程澳大利亚国界线构成的多边形的中心点和面积

gmt spatial @GSHHS_h_Australia.txt -fg -Qk

lines.txt 文件中的线转换为闭合的多边形

gmt spatial lines.txt -F > polygons.txt

计算 polygons.txt 文件中的所有多边形的面积

gmt spatial polygons.txt -Q > areas.txt

使用与上例同样的文件,将面积写到段头信息中,同时将所有的多边形的顶点顺序转换为逆时针

gmt spatial polygons.txt -Q+h -E+p > areas.txt

计算 janmayen_land_full.txt 文件中所有多边形的面积,并把面积写到头段信息中,以面积对这些多边形从大到小排列,并只保留面积大于 1000 平方米的多边形

gmt spatial -Qe+h+p+c1000+sd -V janmayen_land_full.txt > largest_pols.txt

计算文件 A.txt 和文件 B.txt 的相交点

gmt spatial A.txt B.txt -Ie > crossovers.txt

以多边形文件 B.txt 裁剪多边形文件 A.txt ,输出结果为线

gmt spatial A.txt -TB.txt > line.txt

如果某多边形中存在有孔的多边形,首先对其中的有孔多边形进行标记并重置顶点顺序,以便后续的绘图或填充

gmt spatial file.txt -Sh > organized_file.txt

注意事项

GDAL/GMT 格式的文件被认为是完整的数据集,因此在使用该模块时,不能同时输入多个该格式的文件。正确的做法是先使用 gmtconvert 模块转换为普通的表数据,然后再使用该模块。

相关模块

gmtconvertgmtselectgmtsimplify