6.1 网格文件简介

GMT可以处理并绘制2D网格数据。通常,2D网格文件的X方向代表经度、Y方向代表纬度,Z值可以表示高程、重力值、温度、速度等。

GMT可以使用的2D网格数据有四种格式:

  1. netCDF格式
  2. Sun光栅文件
  3. Native二进制格式
  4. 用户自定义网格格式

最常见也最推荐的网格数据格式是 netCDF 格式。

6.1.1 netCDF网格文件

GMT默认将2D网格保存为兼容COARDS的netCDF文件,一般以 .nc.grd 作为文件后缀。

COARDS是许多机构在分发网格文件时遵循的标准格式。GMT兼容该格式,因而GMT可以直接读取其他机构或程序提供的网格文件,GMT生成的网格文件也可以被其他程序读取。

netCDF格式目前有两个版本,netCDF3和netCDF4。GMT目前默认使用netCDF4版本的文件格式。netCDF的具体格式比较复杂,此处不做介绍,一般用户也无需了解。

6.1.2 Sun光栅文件

GMT 可以读取 Sun光栅文件格式的网格文件。Sun 光栅文件包含了一个头段区以及一系列无符号一字节整型以表示bit-pattern。所有的字节按照 scanline 方式排列,每行必须包含偶数个字节。

6.1.3 Native二进制格式

在很久以前的 GMT 中,其自定义了一套二进制网格文件格式。但由于其通用性太差,已经被更现代的 netCDF 格式所取代。新版本的 GMT依然支持这种二进制网格格式,但不建议使用。该文件格式由两部分组成:892个字节的头段区和长度不定的数据区。

native 二进制网格格式包含了一个892字节的头段区以及长度不定的数据区。头段区中包含了用于描述网格文件的变量,这些变量在文件中的存储顺序及其含义如下表:

表 6.1 GMT自定义二进制网格文件结构
参数 类型 说明
nx int X方向节点数目
ny int Y方向节点数目
registration int 配准方式:0代表网格线配准,1代表像素配准
x_min double 区域的X最小值
x_max double 区域的X最大值
y_min double 区域的Y最小值
y_max double 区域的Y最大值
z_min double 数据的Z最小值
z_max double 数据的Z最大值
x_inc double X方向的节点间隔
y_inc double Y方向的节点间隔
z_scale_factor double 读取Z值后要乘以的因子
z_add_offset double Z值乘以因子后要加上的偏移量
x_units char[80] X方向的单位
y_units char[80] Y方向的单位
z_units char[80] Z方向的单位
title char[80] 对数据集的描述
command char[320] 生成该数据的命令
remark char[160] 额外的注释
z TYPE [nx*ny] Z值数组

6.1.4 用户自定义网格格式

GMT还可以读取用户自定义的网格文件,只要用户写好自定义网格文件的读写子程序,并将其与GMT函数库链接起来即可。详情参考源码中的 gmt_customio.c 文件。