✍️ 田冬冬 , 朱邓达 , 陈箫翰  •  📅 2025-12-31

grd2xyz

官方文档:

grd2xyz

简介:

将网格文件转换成表数据

grd2xyz 读取一个或多个二进制2D网格文件,并将XYZ数据以ASCII或二进制格式 写到标准输出中。ASCII输出的格式由参数 FORMAT_FLOAT_OUT 控制,也可以以单精度或双精度浮点数的形式储存为二进制格式,还可以只输出Z值而不包含 XY坐标数据(参见下文的 -Z )。或者可以使用 -T 将网格保存为用于 3D 打印机的 STL 格式。 此外,通过 -C 提供 CPT,将根据 z 值在输出中添加 rgba 列。

语法

gmt grd2xyz ingrid [ -C[section/]master|cpt|color\(_1\),color\(_2\)[,color\(_3\),…][+h[hinge]][+idz][+u|Uunit][+sfname] ] [ -F[f|i] ] [ -L[c|r|x|y]value ] [ -Rregion ] [ -V[level] ] [ -T[a|b][base] ] [ -W[a[+uunit]|weight] ] [ -Z[flags] ] [ -bobinary ] [ -dnodata[+ccol] ] [ -fflags ] [ -hheaders ] [ -oflags ] [ -qoflags ] [ -sflags ] [ --PAR=value ]

输入数据

ingrid[=ID|?varname][+bband][+ddivisor][+ninvalid][+ooffset][+sscale]

输入网格名。通过追加 =ID 可指定 网格格式 [默认为 =nf]。 追加 ?varname 可指定 NetCDF 变量 [默认为 GMT 找到的第一个 2-D 网格]。 参数详细介绍请参考 读 netCDF 文件

可选选项

-C
-C[section/]master|cpt|color\(_1\),color\(_2\)[,color\(_3\),…][+h[hinge]][+idz][+u|Uunit][+sfname]

基于 z 值确定颜色分量。通过指定主 CPT 名称,CPT 文件或用逗号分割的多个颜色, 以创建一个 CPT。如果不指定参数,则在现代模式下使用当前 CPT(如果可用)。 支持以下多种输入:

  1. 主 CPT 名称,例如 earth (详见 内置CPT ), 可使用 CPT 名称 master 或包括相对路径的 section/master 来指定(内置 CPT 不可添加 .cpt 扩展名)。

  2. 自定义 CPT 文件 cpt ,例如 my_colors.cpt

  3. 自动从多个颜色 color\(_1\),color\(_2\)[,color\(_3\),…] 中创建线性连续的 CPT,其中 z 值从 0 开始, 每添加一种颜色 z 值加 1。在这种情况下, color\(_i\) 可以是 r/g/b (e.g. 255/100/75), h-s-v (e.g. 180-0.8-1), c/m/y/k (e.g. 80/50/40/30),HTML十六进制 (e.g. #aabbcc) 或 颜色名称。逗号之间不能有空格。

支持以下选项:

  • +h - 对于有软铰链 (soft hinge) 的主 CPT,可指定 hinge 值启用铰链, 而对于有硬铰链 (harde hinge) 的 CPT,可以修改铰链位置 hinge ,但不能禁用。

  • +i - 指定 dz 使网格 z 值范围分层,默认使用精确范围。

  • +s - 将创建的 CPT 保存到文件 fname。当 CPT 是自动创建时这很有用, 但必须用于 -C 的末尾。

  • +u - 对于任何其他主 CPT,可以通过指定其原始单位 unit 将其 z 值单位转换为米。

  • +U - 与 +u 类似,但是将 z 值单位从米转换为指定单位 unit

注: 我们将在原始输出后新增四列,分别为 red、green 和 blue 的颜色分量 (均在 0-255 范围内)以及透明度(0-100%,0 表示不透明)。如果颜色表为灰度表, 则输出灰度(0-255)而非三原色。

-F
-F[f|i]

输出的XY坐标值用对应的列、行号替代

默认输出的三列数据是:X坐标、Y坐标和Z值。使用该选项,则输出的三列数据为: 列号、行号和Z值。其中,行号和列号从0开始算起。使用 -Ff 则行号和列号从1开始算起。 若使用 -Fi 会输出两列数据:索引值和Z值。索引值相当于是将二维数组用一维数组表示。

-L
-L[c|r|x|y]value

将记录的输出限制在单行或单列。通过 编号(分别通过指令 cr), 或通过固定的 xy 值(分别通过指令 xy)来指定所需的向量。 如果超出有效范围,则不会产生输出并发出警告。 注意:对于指令 xy,将分别查找最接近的列或行。

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

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

使用 -R 选项指定只对网格数据的一个子区域进行操作。若该子区域超过网格边界, 则只输出二者共同的区域

-T
-T[a|b][base]

将用于 3D 打印的 STL 三角网写入标准输出。默认情况下( -Ta)写入 STL ASCII 文件。 附加 b 则改为写入 STL 二进制(小端序)格式。有关 STL 的更多信息, 请参见 维基百科上的 STL 概述注意:所有坐标都经过调整,使得 xmin = ymin = zmin = 0。 可以附加一个不同于网格最小值的更低的 base [默认]。 注意:网格必须不含 NaN 值。如果网格包含 NaN,将自动用网格中的最小值替换它们; 如果希望选择其他值,请使用 grdmath 预处理网格。

-V
-V[level]

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

-W
-W[a[+uunit]|weight]

输出四列数据 x, y, z, w,其中 w 是提供的权重 weight*(如果未提供则为 1)[默认仅输出 *x, y, z]。 使用 -Wa 则权重为每个节点所占据的面积。 对于笛卡尔网格,这仅是 xy 增量的乘积(边界处 [一半] 和角落处 [四分之一] 的网格线配准网格除外)。 对于地理网格,默认长度单位为 k**(因此面积单位为 km:sup:`2`)。通过附加 **+uunit 来更改单位。 对于此类网格,其面积随纬度变化,并且在边界、角落和极点处的网格线注册布局也存在特殊情况。

-Z
-Z[flags]

以 ASCII 或二进制形式输出Z值

使用该选项,则输出时只有Z值,没有XY信息。输出Z值的顺序由 flags 决定。若是行优先,flags 的第一个字符可以取:

  • T 表示第一行是y=ymax

  • B 表示第一行是y=ynin

flags 的第二个字符可以取:

  • L 表示每一行的第一个元素是x=xmin

  • R 表示每一行的第一个元素是x=xmax

若是列优先,则 L|R 为第一个字符,B|T 为第二个字符。

对于网格线配准的网格文件而言:

  • 若网格在X方向是周期的,输出数据时不需要包含x=xmax所在的列,则加上 x

  • 若网格在Y方向是周期的,输出数据时不需要包含y=ymax所在的行,则加上 y

若数据需要做字节交换,则加上 w。最后需要指定数据以何种数据类型保存:

  • a ASCII表,每行输出一个Z值

  • c int8_t, signed 1-byte character

  • u uint8_t, unsigned 1-byte character

  • h int16_t, short 2-byte integer

  • H uint16_t, unsigned short 2-byte integer

  • i int32_t, 4-byte integer

  • I uint32_t, unsigned 4-byte integer

  • l int64_t, long (8-byte) integer

  • L uint64_t, unsigned long (8-byte) integer

  • f 4-byte floating point single precision

  • d 8-byte floating point double precision

默认值为 -ZTLa

-bo
-bo[ncols][type][w][+l|b]

控制二进制文件的输出格式。 (参数详细介绍)

该选项只适用于以二进制格式输出XYZ数据。若需要只输出Z值,可以使用 -Z 选项。

-d
-d[i|o]nodata

将某些特定值当作 NaN。 (参数详细介绍)

-f
-f[i|o]colinfo

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

-h
-h[i|o][n][+c][+d][+msegheader][+rremark][+ttitle]

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

-h 根据第一个网格文件头中的信息输出 1 条头记录。如果选择了二进制输出,则忽略该选项 [默认无头记录]。

-o
-ocols[,…][,t[word]]

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

-qo
-qo[~]rows[+ccol][+a|f|s]

筛选输出的行或数据范围。 (参数详细介绍)

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

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

-^-

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

-++

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

-? 或无参数

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

--PAR=value

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

距离单位

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

ASCII 格式精度

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

非等间隔XY坐标

几乎所有GMT模块只能处理XY等间隔的网格文件, grd2xyz 是个例外。 grd2xyz 可以输出非等间隔网格文件的原始 x y z 值。

时间坐标

GMT可以识别netCDF网格文件中的时间坐标。netCDF变量的 unit 属性会被解析以 确定网格文件中时间坐标的起算点和单位。这些时间坐标值会被进一步根据 TIME_UNITTIME_EPOCH 转换为GMT内部时间值。输出时,默认以相对时间的形式输出,也可以使用 -f 选项 指定以绝对时间方式输出。

行顺序

-Lr 选项允许输出网格中的特定行。请注意,虽然网格的 y 坐标向上为正,但内部行号是扫描线编号,因此向下为正。 因此,第一行 (0) 与最大的 y 值重合。这意味着 -Lr0-Lyymax (使用正确的最大 y 值)将产生相同的结果。 相比之下, x 和列号都是向右为正,其中 -Lc0-Lxxmin (使用正确的最小 x 值)将产生相同的输出。

示例

将一个netCDF网格文件转换为XYZ文件:

gmt grd2xyz @AFR.nc > AFR.xyz

将一个netCDF文件以单精度二进制格式输出其Z值:

gmt grd2xyz @AFR.nc -ZTLf > AFR.b

相关模块

grdedit, grdconvert, xyz2grd