GMT数据概述

在使用GMT绘图时,经常会用到一些特定的地学数据,比如国界线、地形起伏数据等。通常,这些数据不需要任何改动即可用在多种图件中。根据使用方式的不同,它们可以分为三类:

  1. GMT内置数据

  2. GMT远程数据

  3. 自定义数据

其中,GMT内置数据和远程数据,来自于一些公开数据。GMT官方对他们进行了整理,提供给用户使用。自定义数据则是由用户自己准备。GMT中文社区为用户整理了一些自定义数据。

GMT内置数据

GMT内置数据是指在安装GMT时就已经安装了的数据,因而可以直接使用。这类数据包括

GMT远程数据

GMT远程数据保存在GMT数据服务器上。当需要使用某个数据时,GMT会自动将数据下载到本地。目前,GMT提供了如下远程数据:

工作原理及技术细节

经过一些数据处理,GMT官方把一些公开数据处理成不同分辨率、不同配准方式的数据,并保存在GMT专门的数据服务器上。当用户第一次使用某个分辨率的某个数据时,GMT会自动从服务器上下载该数据文件,并保存到GMT用户目录下的特定子目录下(默认为 ~/.gmt/server 目录的子目录),然后再读取该文件。当用户再次使用该数据时,GMT会自动从本地GMT用户目录下读取该数据文件,而无需再次从服务器下载。

数据分辨率

通常,公开数据提供者只提供一个原始分辨率版本。但有些时候用户不需要原始分辨率。GMT对原始数据做笛卡尔高斯滤波以进行减采样,提供了多种不同分辨率以及不同配准方式的版本,以满足不同的用户需求。

数据分块

通常,一个分辨率、一个配准方式的数据以单个文件的形式保存在GMT服务器中。但,对于高分辨率的数据,这会导致单个文件的大小变得很大,使得网络下载变得困难。为了解决这一问题,对于高分辨率的数据,GMT官方将其分割成若干个小区块,每个区块以单独的文件保存在服务器上,通常每个区块对应的文件大小约5 MB或更小。当用户需要某个区域的高分辨率数据时,可以通过 -R 选项指定区域,GMT会自动下载该区域的所有区块的数据,然后自动合并成单个网格数据供用户使用。这样可以极大减小数据下载量。例如,想要用3弧秒的数据绘制2度x2度的区域,GMT只需要下载该区域几MB的网格数据,而无需下载整个7 GB的3弧秒数据,极大的节省了下载时间。

数据压缩

GMT以无损且高压缩率的netCDF-4短整型格式保存单个网格数据,使得GMT提供的数据比原始数据占据更小的硬盘空间,而不丢失任何分辨率信息。对于分区块的高分辨率数据,GMT将数据以 JPEG2000 格式保存在GMT服务器中。该格式具有超高的压缩率,因而可以极大减小数据下载量。当将这些 JPEG2000 格式的数据下载到本地后,GMT会自动将其转换为短整型 netCDF4 格式。转换过程中使用了GDAL的功能,因而要求GMT支持GDAL。

数据更新

当原始数据发布了新版本,或GMT提供的数据被发现存在问题时,GMT会对数据服务器上的数据进行不定时的更新。GMT只提供数据的最新版本。如果你需要老版本的数据,需要自行到数据提供者的官方网站下载数据并自行处理。

GMT检查数据更新的机制是:

  1. 第一次使用任一远程数据时,GMT会从数据服务器下载一个几十KB的文本文件 gmt_data_server.txt 并保存到用户的 ~/.gmt/server 目录下

  2. 当再次使用任一远程数据时,GMT会检查本地文件 gmt_data_server.txt 的日期,若其日期比当前时间差一天(该时间阈值用户可自行控制)以上,则再次从GMT服务器下载文件 gmt_data_server.txt 并替换本地的老文件

  3. 读取 gmt_data_server.txt 文件的内容,根据其内容确定GMT数据服务器上的远程数据是否有更新。若本地的数据文件比GMT数据服务器上的数据老,则 GMT会自动将本地已下载的数据文件删除,并重新从GMT服务器下载。由此使用远程数据的更新。

使用方式

GMT为每种远程数据都提供了不同的分辨率和配准方式的数据,具体信息在各个数据的小节会详细介绍。所有GMT远程数据都可以通过指定特殊文件名的方式来使用: @remote_name_rru_reg

  • @ 符号用于告诉GMT这是一个远程数据

  • remote_data 是远程数据的具体名字

  • rr 是一个两位整数,用于指定要使用的数据分辨率,单位由 u 指定。单位 u 可以取为 dms 分别表示弧度、弧分和弧秒

  • reg 指定了数据的网格配准方式,可以取 gp,分别表示网格线配准或像素配准。该项是可选的,若不指定 reg,则默认返回网格线配准的网格数据(除非不存在网格线配准的数据)。

除此之外,某些远程数据还有一个默认的CPT文件,若用户不指定CPT文件,则在绘制数据时会使用该默认CPT文件。

注解

关于每个数据的具体名称、分辨率、默认配准方式,在各个数据的小节中会详细列出。

例如,若需要使用30弧分的网格线配准的地形数据,则可以直接指定文件名:

gmt grdimage @earth_relief_30m_g -pdf map

对于分区块的高分辨率数据,如果想要将某个区域的数据以单个文件的形式保存,并供其它软件或命令使用,可以使用 grdcut 命令实现。例如:

gmt grdcut @earth_relief_02m_g -Gearth_at_2m.grd

参数设置

你可以通过多个参数和命令进一步控制远程数据的获取过程以及数据在本地所占据的硬盘空间:

  1. 通过参数 GMT_DATA_SERVER 设置使用离你最近的GMT数据服务器以加快下载速度

  2. 通过参数 GMT_DATA_SERVER_LIMIT 设置允许下载的远程数据的文件大小,默认无限制

  3. 使用参数 GMT_AUTO_DOWNLOAD 彻底关闭数据自动下载功能。若关闭,你将无法再下载或更新远程数据,但已下载到本地的数据依然可以使用。

  4. 通过参数 GMT_DATA_UPDATE_INTERVAL 控制检查远程数据是否更新的频率 [默认为每天检查一次]

  5. 通过 clear 命令情况整个 server 目录下的远程数据或部分数据

注解

GMT数据服务器目前有两个镜像:

对于国内用户,若官方镜像无法连接或者很慢,可以考虑使用欧洲镜像。修改方式为:

gmt set GMT_DATA_SERVER http://europe.generic-mapping-tools.org

离线使用

如果你即将有一段无网络或低网速的时间,或者你不希望在第一次需要某个数据等待数据的下载,你可以使用 gmtget 模块将数据提前下载到本地。

你可以下载所有远程数据:

gmt get -Ddata

也可以只下载地球相关数据:

gmt get -Ddata=earth

或者只下载某一类或某几类数据:

gmt get -Ddata=earth_relief,earth_mask

高分辨率数据的数据量大,你也可以只下载低分辨率的数据。比如只需要低于1弧分分辨率的地形数据:

gmt get -Ddata=earth_relief -I1m

更多功能,见 gmtget 模块文档。

自定义数据

除了GMT官方提供的内置数据和远程数据外,用户还可以自行准备数据,建立GMT数据库,供GMT使用。GMT中文社区整理了一些自定义数据,用户可以选用,包括:

建立GMT数据库

建立GMT数据库的方法很简单,只要将数据集中放在某个特定目录下,然后修改环境变量 GMT_DATADIR 使得其包含该目录即可。在使用数据库里的数据时,就可以直接指定数据文件名,GMT会自动到 GMT_DATADIR 所指定的目录中寻找该数据,而无需指定数据文件的完整路径。

比如Linux和macOS下数据库可以放在 ~/GMTDB,然后向 ~/.bashrc 中加入如下语句:

export GMT_DATADIR=~/GMTDB

对于Windows用户,可以把数据放在 D:\GMTDB (路径最好不要有空格)下,然后打开“我的电脑”->“属性”->“高级”->“环境变量”,然后添加环境变量,变量名为 GMT_DATADIR,值为 D:\GMTDB,最后可能需要重启电脑使得环境变量生效。

如果喜欢将不同的数据分类放在不同的目录下,则可以向 GMT_DATADIR 添加多个目录。多个目录之间用逗号 , 分隔。例如:

export GMT_DATADIR=~/GMTDB/data1,~/GMTDB/data2

Linux和macOS用户,可以进一步简化为:

export GMT_DATADIR=~/GMTDB/

GMT_DATADIR 中的目录若以 / 结尾,GMT则会在 ~/GMTDB 及其子目录下递归地寻找文件。注意,Windows不支持这一功能。