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

# grdproject

官方文档:

  grdproject

简介:

  对网格数据做地图变换和逆变换

grdproject 根据是否设置了 `-I` 选项来执行不同的操作。 如果已设置，它将通过在新节点处对表面进行重采样，将网格数据集从矩形坐标系转换为地理坐标系。 如果未设置，它将把地理网格数据集投影到矩形网格上。 为了获取每个新节点的值，其位置会被反向投影回输入网格，然后在周围的输入网格值之间进行插值。 默认使用双三次插值。通过同时对输入网格节点进行正向投影来避免混叠。 如果两个或更多节点被投影到同一个新节点上，它们的平均值将在新节点值的计算中起主导作用。 插值和混叠由 `-n` 选项控制。可以通过指定网格间距、节点数量或分辨率等方式确定新节点间距。 未受输入数据约束的节点被设置为 NaN。

`-R` 选项可用于选择比网格文件范围更大或更小的地图区域。

## 语法

gmt grdproject ingrid `-G` outgrid `-J` parameters [ `-C`[dx/dy] ] [ `-D` xinc[+e|n][/yinc[+e|n]] ] [ `-E` dpi ] [ `-F`[c|i|p|e|f|k|M|n|u] ] [ `-I` ] [ `-M` c|i|p ] [ `-R` region ] [ `-V`[level] ] [ `-j` flags ] [ `-n` flags ] [ `-r` reg ] [ --PAR=value ]

## 输入数据

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

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

## 必须选项

-G

-G outgrid[=ID][+d divisor][+n invalid][+o offset|a][+s scale|a][:driver[dataType][+c options]]

> 输出网格文件名。通过追加 =ID 可指定 网格格式。 参数详细介绍请参考 写 netCDF 文件。

-J

-J projection

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

## 可选选项

-C

-C[dx/dy]

  让投影后的坐标相对于投影中心 [默认相对于左下角]。 可以添加投影后坐标的偏移量 dx/dy [默认无偏移]。

-D

-D xinc[+e|n][/yinc[+e|n]]

  设置新网格的网格间距。如果既未设置 `-D` 也未设置 `-E`，则选择与输入节点数量相同的输出节点。

  - 地理（度）坐标：附加 m 表示弧分，或 s 表示弧秒。 如果改为附加单位 e、 f、 k、 M、 n 或 u 之一， 则分别以米、英尺、千米、英里、海里或美制测绘英尺为单位，并将其转换为该区域中间纬度处的等效经度。 如果给出了 y_inc 但设置为 0，则它将被重置为等于 x_inc。否则它将被转换为纬度。

  - 所有坐标：如果附加了 +e，则相应的最大 x （东）或 y （北）可能会稍作调整以精确适应给定的间距 [默认情况下，增量可能会稍作调整以适应给定的范围]。可以不指定间距，而是通过在提供的整数参数后附加 +n 来指定所需的节点数量。 随后将根据配准方式、节点数量和范围重新计算间距。

  注意：如果使用了 `-R` grdfile，则会继承网格间距和配准方式。使用 `-D` 和 `-r` 可重新设置。

-E

-E dpi

  设置新网格的分辨率，即每英寸的点数。

-F

-F[c|i|p|e|f|k|M|n|u]

  强制 1:1 比例缩放，即输出数据（或输入，参见 `-I`）的单位是真实的投影长度，以米为单位 [e]。

  若要指定其他单位，请附加 f （英尺）、 k （千米）、 M （法定英里）、 n （海里）、 u （美制测绘英尺）、 i （英寸）、 c （厘米）或 p （磅）。 如果不使用本选项，输出（或输入，参见 `-I`）将采用由 PROJ_LENGTH_UNIT 指定的单位（参见 `-M`）。

-I

-I

  逆变换，将矩形区域变换成地理区域。

-M

-Mc|i|p

  指定投影后的投影度量单位，附加 c、 i 或 p 表示厘米、英寸或磅 [默认值由 PROJ_LENGTH_UNIT 控制]。 不能与 `-F` 一起使用。

-R

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

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

> 可以指定一个更小的 w/e/s/n 范围，从而仅投影网格文件的一个子集 [默认值为网格文件给出的范围]。

-V

-V[level]

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

-j

-je|f|g

  设置球面距离的计算方式。 (参数详细介绍)

-n

-n[b|c|l|n][+a][+b BC][+c][+t threshold]

  设置网格文件的插值方式。 (参数详细介绍)

-r

-r[g|p]

  设置网格配置方式 [默认为网格线配准]。 (参数详细介绍)

-^ 或 -

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

-+ 或 +

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

-? 或无参数

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

--PAR=value

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

## 示例

将远程地理网格 @earth_relief_05m 的一部分转换为比例尺为每度 0.25 英寸、分辨率为 300 dpi 的像素配准墨卡托网格:

    gmt grdproject @earth_relief_05m -R20/50/12/25 -Jm0.25i -E300 -r -Getopo5_merc.nc -Mi

将文件 topo_tm.nc 反投影回地理网格。topo_tm.nc 中的坐标必须是使用相同的投影参数创建的:

    gmt grdproject topo_tm.nc -R-80/-70/20/40 -Jt-75/1:500000 -I -D5m -V -Gtopo.nc

将文件 topo_utm.nc（单位为 UTM 米）反投影回地理网格，指定以米为度量单位的一比一映射:

    gmt grdproject topo_utm.nc -R203/205/60/65 -Ju5/1:1 -I -Gtopo.nc -V

将文件 data.nc（单位为墨卡托米，中央经线为格林威治，东伪偏移为 -4，且基于 WGS-72 椭球体生成）反投影回地理网格，指定以米为度量单位的一比一映射:

    gmt grdproject data.nc -Jm/1:1 -I -F -C-4/0 -Gdata_geo.nc -V --PROJ_ELLIPSOID=WGS-72

## 输出区域问题

投影（矩形）数据集的边界不一定产生矩形的地理边界（墨卡托投影是一个例外）。在这些情况下，某些节点可能不受约束（会设置为 NaN）。 为了获得完整的网格，输入网格文件可能需要覆盖比研究区域更大的范围。

## 选择椭球体与球面解法

如果已实现椭球体公式且用户选择了椭球体作为参考形状（见 PROJ_ELLIPSOID），GMT 将使用椭球体公式。 用户需要注意几个潜在的陷阱：

(1) 对于某些投影，如横轴墨卡托 (Transverse Mercator)、阿尔伯斯 (Albers) 和兰勃特正形圆锥投影 (Lambert's conformal conic)， 当映射区域较小时，我们使用椭球体表达式；对于较大的地图，则切换到球面表达式（并代入适当的辅助纬度）。 椭球体公式的使用情况如下： (a) 横轴墨卡托投影：当所有点都在中央经线 10 度以内时； (b) 圆锥投影：当经度范围小于 90 度时； (c) 卡西尼投影 (Cassini)：当所有点都在中央经线 4 度以内时。

(2) 当尝试匹配某些历史数据（例如使用特定投影和特定参考椭球体获得的坐标）时，可能会发现 GMT 给出的结果略有不同。 这种不匹配的一个可能原因是早期的计算通常使用较少的有效数字。例如，Snyder 的示例经常使用 Clarke 1866 椭球体（他将其定义为扁率 f = 1/294.98）。 根据 f，我们得到偏心率平方为 0.00676862818（这是 GMT 使用的值），而 Snyder 则进行了取整并使用 0.00676866。这种差异可能会产生几十厘米的偏差。 如果需要重现使用这种略有不同的偏心率投影的坐标，应该指定自己的椭球体，其参数与 Clarke 1866 相同，但扁率 f = 1/294.97861076。 此外，请注意旧数据可能参考了不同的基准面 (datums)，除非知道使用了哪个基准面并将所有数据转换为统一的基准面，否则可能会出现数十到数百米的偏差。

(3) 注意 PROJ_SCALE_FACTOR 对于某些投影具有特定的默认值，因此可能必须覆盖该设置以匹配使用其他设置产生的结果。 椭球体（如果可用）与球面解法的决策顺序如下：

> - 用户指定 -je，强制使用椭球体解法。

> - 用户指定 -jg，强制使用球面解法。

> - 通过 -R 设置了一个特定的区域，这意味着该区域的部分内容将超出距离特定（或未设置时隐含的）中央经线的规定经度限制。

当请求或隐含球面解法时，会考虑当前选定的椭球体，并在精确方程中用相关的辅助纬度代替纬度。 最后，坐标转换还可能受到选定的 PROJ_SCALE_FACTOR 的影响，该值通常为 0.9996，但对于球体则为 1。

注意：对于某些投影，尽管用户选择了椭球体，仍可能使用球面解法。这种情况发生在用户的 -R 设置所隐含的区域超出了椭球体级数展开有效的定义域。 具体条件如下：

1. 兰勃特正形圆锥投影 (-JL) 和阿尔伯斯等积投影 (-JB) 在地图比例尺超过 1.0E7 时将使用球面解法。

2. 横轴墨卡托投影 (-JT) 和 UTM 投影 (-JU) 在 -R 给出的西边界或东边界距离中央经线超过 10 度时将使用球面解法。

3. 卡西尼投影 (-JC) 同理，但限制仅为 4 度。

## 相关模块

mapproject