✍️ 田冬冬 , 陈箫翰  •  📅 2026-01-12

select

官方文档:

select

简介:

筛选符合某个特定准则的数据

该命令会从输入文件 table 中读取前两列作为经度和纬度,并判断该点是否符合一定的空间准则, 以筛选出符合条件的记录。

用于判断的空间准则包括:

  1. 在矩形区域内

  2. 与点文件中的任意一个点的距离在一定范围之内

  3. 与线文件中的任意一条线的距离在一定范围之内

  4. 在多边形文件所指定的多边形内

  5. 在某个地理区域内(需要海岸线数据)

  6. Z 值在某个范围内

  7. 该点所在的网格单元内具有有效值(即非零和非NaN的值)

语法

gmt select [ table ] [ -Amin_area[/min_level/max_level][+a[g|i][s|S]][+l|r][+ppercent] ] [ -Cpointfile|lon/lat+ddist ] [ -Dresolution[+f] ] [ -E[f][n] ] [ -Fpolygonfile ] [ -Ggridmask ] [ -I[cfglrsz] ] [ -Jparameters ] [ -Llinefile+ddist[+p] ] [ -Nmaskvalues ] [ -Rregion ] [ -V[level] ] [ -Zmin[/max][+a][+ccol][+h[k|s]][+i] ] [ -aflags ] [ -bibinary ] [ -bobinary ] [ -dnodata[+ccol] ] [ -eregexp ] [ -fflags ] [ -ggaps ] [ -hheaders ] [ -iflags ] [ -oflags ] [ -qflags ] [ -sflags ] [ -wflags ] [ -:[i|o] ] [ --PAR=value ]

输入数据

table

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

空间准则与可选选项

准则1

-J
-Jprojection

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

-R
-Rxmin/xmax/ymin/ymax[+r][+uunit]

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

不指定投影则默认使用 -Jx1 。使用 -R 筛选出在该矩形区域内的点:

gmt select points.xy -R0/5/0/5

准则2

筛选出与文件 pointfile 中的基准点的距离在一定范围内的点。

-C
-Cpointfile+ddist

ASCII文本文件 pointfile 中每一行是一个基准点的经纬度坐标。 该准则会筛选出与任意一个基准点的距离在 dist 之内的记录。

dist 等于0,则 pointfile 必须有第三列,表示每个基准点各自的影响半径。 默认情况下 dist 是笛卡尔坐标系下的距离,单位为用户单位。 若指定 -fg 选项,则表明 dist 为球面距离,后面可以添加地理单位(详情见 单位 )。

如果只有一个基准点,可以简单使用 -Clon/lat+ddist

如果同时使用 -R-J 选项,则表示基于投影后的图片纸面上的距离进行判断(详情请参考末尾的例子)。

准则3

筛选所有与线文件 linefile 中的任意一条线的距离在一定范围之内的点。

-L
-Llinefile+ddist[+p]

ASCII文本文件 linefile 内容格式与表示线段的格式相同,也可以是多段数据表示的多条线段 (参见 多段数据与数据段头记录 )。 该准则会筛选出与任意一条线段的距离在 dist 之内的记录。

dist 等于零,则可以在 linefile 中每段数据的段头记录中使用 -Ddist 参数,为每个线段分别指定距离值。 (参见 数据段头记录中的额外属性 )

默认情况下 dist 是笛卡尔坐标系下的距离,单位为用户单位。 若指定 -fg 选项,则表明 dist 为球面距离,后面可以添加地理单位(详情见 单位 )。

如果使用 +p 则会进一步筛选出到最近的线段的垂直投影位置在线段的两个端点内的数据 (默认情况下垂直投影位置在线段以外的数据点也会被包含进来)。

准则4

筛选出在某个多边形内的点。

-F
-Fpolygonfile

多段数据文件 polygonfile 的内容为一个或多个闭合多边形的各个顶点(参见 多段数据与数据段头记录 )。 该选项筛选出在任意一个多边形内的数据记录。

准则5

根据地理特征信息筛选数据。

-N
-Nwet/dry

跳过或保留海湖(wet)/陆地(dry)内的点。

wetdry 可以取 sk ,分别表示 skip 和 keep。 默认值为 -Ns/k ,即保留所有位于陆地上的记录,并跳过所有海洋、湖泊中的记录。

-Nocean/land/lake/island/pond

进一步细分地理特征,五项分别表示海洋、大陆和岛屿(Continents and islands)、 湖泊(Lakes (regular and river lakes))、湖中岛(Islands inside lakes)以及湖中岛中湖(Ponds in islands inside lakes), 对应GSHHG数据的不同等级((详情见 gshhg )) 每一项均可以取 sk ,分别表示 skip 和 keep。默认值为 -Ns/k/s/k/s , 等效于 -Ns/k ,即仅保留所有陆地上的记录。

-D
-Dresolution[+f]

选择海岸线数据的精度,仅与 -N 选项一起使用有效。见 coast-D 选项的介绍。

-A
-Amin_area[/min_level/max_level][+a[g|i][s|S]][+l|r][+ppercent]

不绘制面积过小的区域(湖泊或岛屿),或不绘制某个级别的湖泊边界。

在绘制湖泊时,若不管湖泊的面积大小而把所有湖泊的边界都画上去,可能导致图 看上去比较乱,该选项用于对湖泊进行筛选。面积小于 min_area 平方千米 或者湖泊级别不在 [min_level,max_level] 范围的边界都不会被绘制。 默认值为 0/0/4,即绘制所有湖泊边界,即绘制0到4级所有级别的面积大于0的 湖泊。

对于level=2,即湖岸线,包括常规的湖以及很宽的河流。加上 +r 则只绘制河流, 加上 +l 则只绘制常规湖。

对于南极洲而言,因为有冰层的存在,所以海岸线有多种处理方式:

  • +ai 用ice shell boundary作为南极洲的海岸线,默认值

  • +ag 以ice grounding line作为海岸线

  • +as 忽略南纬60度以南的海岸线,用户可以使用 plot 绘制自己的南极洲海岸线

  • +aS 忽略南纬60度以北的海岸线

+pprecent:一个多边形,降低精度后,边数减少,面积变化,当面积变化 过大时再绘制这个多边形就不合适了,该子选项用于去除那些面积与最高精度面积 之比小于 percent 的多边形。

准则6

筛选Z值在某个范围内的点

-Z
-Zmin[/max][+a][+ccol][+h[k|s]][+i]

筛选出数据第三列的Z值在 minmax 范围内或等于 NaN 的数据点 (使用 -s 选项可以排除掉 NaN 数据点)。

若省略 max 则判断Z值是否等于 min 。若不限制范围的上限或下限, min[/max] 可以使用 - 代替。

注意: (1)若第三列Z值代表时间,想要判断Z值是否在某个时间范围内,需要使用 -f2T 选项。 (2)若想要对多列做类似的测试,可以重复多次使用 -Z 选项。 (3)输入数据必须至少有三列。 (4)当重复多次使用 -Z 选项时,不可使用 -Iz 选项。

可以使用以下附加选项:

  • +a 重复使用 -Z 选项时,数据点只要满足一个选项即可(默认要满足所有 -Z 选项)。

  • +ccol 指定Z值所在的列。只使用一个 -Z 选项时,不使用 +c 默认为第三列(col=2)。 当重复多次使用 -Z 选项时,不使用 +c 默认每个 -Z 选项分别使用数据中第三列、第四列、第五列……为Z值。

  • +i 反转筛选准则。筛选出Z值不在 minmax 范围内的数据点。

准则7

根据数据点所在的网格单元内具有有效值(即非零和非NaN的值)来筛选数据。

-G
-Ggridmask

使用 -Ggridmask 指定一个网格文件。对于每个数据点而言,判断其所在位置的网格单元是否具有有效值(即非零或非NaN的值)。若该网格单元有有效值,则保留该数据点。

其他选项

-E
-E[f][n]

在判断点是否在一个多边形内时,默认会将恰好在多边形边界线上的点也认为是在多边形内,使用该选项会将多边形上的点认为是在多边形外部。 fn 分别修改 -F-N 选项的行为。

-I
-I[cflrsz]

对七个准则取反,即筛选出不符合准则的记录。c、f、g、l、r、s、z分别对应于 -C-F-G-L-R-N -A -D-Z

-V
-V[level]

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

-a
-a[[col=]name][,]

控制输入或输出为 OGR/GMT 格式时对非空间元数据的处理方式。 (参数详细介绍)

-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 的某些功能。 (参数详细介绍)

-s
-s[cols][+a|+r]

设置 NaN 记录的处理方式。 (参数详细介绍)

-w
-wy|a|w|d|h|m|s|cperiod[/phase][+ccol]

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

-:
-:[i|o]

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

-^-

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

-++

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

-? 或无参数

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

--PAR=value

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

距离单位

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

ASCII 格式精度

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

此注释仅适用于 ASCII 输出与二进制或 netCDF 输入或 -: 选项结合使用的情况。另请参阅下文。

ASCII 输入记录处理注释

除非您使用 -: 选项,否则选定的 ASCII 输入记录将原样复制到输出。 这意味着诸如 -foT 之类的选项以及 FORMAT_FLOAT_OUTFORMAT_GEO_OUT 等设置将不会对输出产生任何影响。 另一方面,它允许选择包含各种内容的记录,包括字符串(无论是否加引号)、注释和其他非数值内容。

距离注释

如果选择了 -C-L 选项,则距离为笛卡尔距离,单位为用户单位。 使用 -fg 则表示公里单位的球面距离和地理(经度, 纬度)坐标。 或者,指定 -R-J 以测量地图单位(由 PROJ_LENGTH_UNIT 确定的厘米、英寸或磅)下的投影笛卡尔距离。

本程序多年来不断演进。最初,-R-J 是处理地理数据所必需的,但现在已全面支持球面计算。 因此,只有在您希望将测试应用于投影数据而非原始坐标时,才应使用 -J 。如果使用了 -J ,则通过 -C-L 给出的距离均为投影距离。

分段注释

如果分段中有一个或多个记录通过测试,输入文件中的分段头将被复制到输出。选择始终是逐点进行的,而不是按分段进行的。这意味着分段中只有通过测试的点才会包含在输出中。 如果您希望裁剪线条并在分段末端包含新的边界点,则必须改用 spatial

示例

返回远程文件 @ship_15.txt 中位于经度 246 到 247、纬度 20 到 21 之间的区域内的数据点:

gmt select @ship_15.txt -R246/247/20/21

返回该矩形区域之外的所有点:

gmt select @ship_15.txt -R246/247/20/21 -Ir

筛选输入数据 data.txt 中与 pts.txt 的任意基准点的距离在300 km以内, 且与 lines.txt 中线段的距离在100 km以外( -Il )的点。结果输出到 subset.txt

gmt select data.txt -fg -Cpts.txt+d300k -Llines.txt+d100k -Il > subset.txt

此处需要使用 -fg 以告知程序正在处理地理数据。

筛选某个区域内所有不在陆地上的点:

gmt select data.txt -R120/121/22/24 -Dh -Nk/s > subset.txt

筛选 quakes.txt 中所有位于多边形区域内的点:

gmt select quakes.txt -Flonlatpath.txt -fg > subset.txt

筛选 stations.txt 中的点投影作图后,与 origin.txt 的基准点在图片纸面上的距离在5 cm之内的点:

gmt select stations.txt -Corigin.txt+d5 -R20/50/-10/20 -JM20c --PROJ_LENGTH_UNIT=cm > subset.txt

返回 quakes.txt 中位于网格 topo.nc 范围内且对应网格值不为零的所有点:

gmt select quakes.txt -Gtopo.nc > subset2.txt

返回第 3 列数值在 10-50 范围内且第 5 列数值均为负数的所有记录:

gmt select dataset.txt -Z10/50 -Z-/0+c4 > subset3.txt

GSHHG 信息

GSHHG (The Global Self-consistent, Hierarchical, High-resolution Geography Database) 最初为 GSHHS,是一个海岸线数据库,主要有三个来源:World Vector Shorelines (WVS,不包括南极洲), CIA World Data Bank II (WDBII), 和 Atlas of the Cryosphere (AC,只包含南极洲)。 除了南极洲,所有的 1 级多边形(海陆边界)都来自更准确的 WVS,所有的更高级别 的多边形(2-4 级,湖泊边界、湖中岛边界和湖中岛中湖边界)来自 WDBII。南极洲 的海岸线有两种:冰盖的边界和陆地的边界,可以使用 -A 选项选择。为了将 WVS 、WDBII 和 AC 数据转换为 GMT 可用的格式,GMT 已经进行了多种处理,包括:由线段 组建多边形,去重,以及校正多边形之间的交叉等。每个多边形的面积已经被计算出来, 因此,用户可以自己选择不绘制小于最小面积的多边形,还可以限制绘制的多边形的级别 ,见 -A 选项。绘制海岸线时,还可以使用不同的精细程度,其中低分辨率的海岸线 是由 Douglas-Peucker 算法简化得到的。河流和边界的分类遵循 WDBII。详细细节见 GSHHG

点位于多边形内/外

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

相关模块

convert, simplify, spatial, grdlandmask, coast