---
author: 田冬冬, 陈箫翰
date: 2025-08-17
---

# -g 选项

在处理多段数据时，GMT提供了三种机制来决定文件中数据的分段情况：

1. 使用数据段头记录来标记一段数据的开始，详见 {doc}`/table/ascii`

2. 若输入数据中，某个记录的某个关键列的值为NaN，则也可以用于将该记录作为数据段的开始标识

   - 当 {term}`IO_NAN_RECORDS` 为 **skip** 时，这些包含NaN值的记录会被自动跳过
   - 当 {term}`IO_NAN_RECORDS` 为 **pass** 时，这些包含NaN值的记录会被当做数据段的开始标识

3. 也可以使用 **-g** 选项，通过判断两个相邻的数据点是否符合某个准则来决定数据分段

**-g** 选项的完整语法为：

> **-gx**|**y**|**z**|**d**|**X**|**Y**|**D***gap*[**u**][**+a**][**+c***col*][**+n**|**p**]

该选项可重复多次，以指定多个分段准则。一次使用 **x**|**y**|**z**|**d**|**X**|**Y**|**D** 中的其中一个指定一个准则。
有些模块可以进行地图投影计算投影坐标（例如 {doc}`/module/mapproject`）。大写字母表示的准则会应用到计算出的投影坐标中。

- **x**|**X** 表示相邻两点间的X坐标跳变超过 *gap* 则定义为一个分段
- **y**|**Y** 表示相邻两点间的Y坐标跳变超过 *gap* 则定义为一个分段
- **z** 表示相邻两点间的Z值跳变超过 *gap* 则定义为一个分段。默认数据中的第三列为Z值，用户可以使用 **+c***col* 自行规定哪一列为Z值（默认 *col* 为2即第三列）。
- **d**|**D** 表示相邻两点间的距离超过 *gap* 则分段

用户可以设置 **u** 用于指定 *gap* 的单位：

- 对于地理坐标 (**x**|**y**|**d**)，*u* 可以取 **d**(egree), **m**(inute), **s**(econd),
  或 (m)**e**(ter), **f**(eet), **k**(ilometer), **M**(iles), 或 **n**(autical miles)
  [默认为(m)**e**(ter)]
- 对于投影坐标 (**X**|**Y**|**D**)，*u* 可以取 **i**(nch), **c**(entimeter), **p**(oint)
  [默认值由 {term}`PROJ_LENGTH_UNIT`控制]
- 对于 **x**|**y**|**z**，若输入是时间数据，则单位由 {term}`TIME_UNIT` 控制

默认情况下，只要符合任意一个准则就对数据进行分段。用户可以使用 **+a** 表示所有准则都满足时才进行分段。

默认使用两点间的X坐标、Y坐标或距离差的绝对值作为 *gap* ，进行分段。
- **+n** 表示用前一数据减去当前数据作为 *gap*
- **+p** 表示用当前数据减去前一数据作为 *gap*
