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

# grd2xyz

官方文档:

  grd2xyz

简介:

  将网格文件转换成表数据

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

## 语法

gmt grd2xyz ingrid [ `-C`[section/]master|cpt|color\(_1\),color\(_2\)[,color\(_3\),...][+h[hinge]][+i dz][+u|U unit][+s fname] ] [ `-F`[f|i] ] [ `-L`[c|r|x|y]value ] [ `-R` region ] [ `-V`[level] ] [ `-T`[a|b][base] ] [ `-W`[a[+u unit]|weight] ] [ `-Z`[flags] ] [ `-bo` binary ] [ `-d` nodata[+c col] ] [ `-f` flags ] [ `-h` headers ] [ `-o` flags ] [ `-qo` flags ] [ `-s` flags ] [ --PAR=value ]

## 输入数据

ingrid[=ID|?varname][+b band][+d divisor][+n invalid][+o offset][+s scale]

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

## 可选选项

-C

-C[section/]master|cpt|color\(_1\),color\(_2\)[,color\(_3\),...][+h[hinge]][+i dz][+u|U unit][+s fname]

  基于 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

  将记录的输出限制在单行或单列。通过 行 或 列 编号（分别通过指令 c 或 r）， 或通过固定的 x 或 y 值（分别通过指令 x 或 y）来指定所需的向量。 如果超出有效范围，则不会产生输出并发出警告。 注意：对于指令 x 和 y，将分别查找最接近的列或行。

-R

-R xmin/xmax/ymin/ymax[+r][+u unit]

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

> 使用 `-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[+u unit]|weight]

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

-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][+m segheader][+r remark][+t title]

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

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

-o

-o cols[,...][,t[word]]

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

-qo

-qo[~]rows[+c col][+a|f|s]

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

-s

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

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

-^ 或 -

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

-+ 或 +

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

-? 或无参数

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

--PAR=value

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

## 距离单位

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

## ASCII 格式精度

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

## 非等间隔XY坐标

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

## 时间坐标

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

## 行顺序

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

## 示例

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

    gmt grd2xyz @AFR.nc > AFR.xyz

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

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

## 相关模块

grdedit, grdconvert, xyz2grd