0%

5分钟学会GMT

本文面向GMT的初学者或者即将打算学习GMT的新人。

GMT简介

GMT是一套地学绘图的工具,可以输出高质量的论文插图,并具备优秀的数据处理工具,比如进行网格插值、数据筛选、空间滤波甚至重力场反演等。GMT在测绘、地球物理、海洋、遥感等领域有广泛的使用,GMT通常被指定为研究生必备技能之一。然而由于其采用命令行模式,有一定的学习门槛。不过掌握之后,会大大提高科研生产力。

GMT由美国夏威夷大学Paul教授等人开发,至今已有30多年历史,且仍旧在更新维护。中国也有一批热衷于更新GMT的粉丝。

基本每天更新代码的Paul爷爷

下面分Windows和Linux来介绍安装GMT使用。

Windows

安装

需要准备的程序:

Ghostscript是为了解释ps矢量语言,支持转化成pdf格式。gsview是为了打开ps文件。

安装后,记得查看下系统路径PATH时候设置?如果没自动设置路径,请手动加上。

不需要重启电脑。

使用

GMT采用了脚本程序,在window中可以写bat文件进行批量运行。简单说就是把一行一行的代码放进bat中依次执行,后面的绘图代码将叠加到上一行的结果之上。

一般,请前往GMT安装目录找到example目录,随便进入一个例子(动画除外),找到bat文件,双击执行,结束后当前目录会有图片产生。

例子的目录一般在:C:\programs\gmt6\share\doc\examples

注意,有些例子使用了在线数据,因此需要联网运行。有些例子可能使用了gawk等文本处理工具,需要下载后放到GMT的bin目录(其他可以被path搜索的目录也行)。

下面是ex01代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
REM		GMT EXAMPLE 01
REM
REM Purpose: Make two contour maps based on the data in the file osu91a1f_16.nc
REM GMT modules: set, subplot, grdcontour, coast
REM
gmt begin ex01
gmt set MAP_GRID_CROSS_SIZE_PRIMARY 0 FONT_ANNOT_PRIMARY 10p
gmt subplot begin 2x1 -A -M0.5c -Blrtb -Bafg -T"Low Order Geoid" -Fs16c/0 -Rg -JH16c
gmt coast -JH? -Glightbrown -Slightblue -c0,0
gmt grdcontour @osu91a1f_16.nc -C10 -A50+f7p -Gd10c -Ln -Wcthinnest,- -Wathin,- -T+d8p/2p+l
gmt grdcontour @osu91a1f_16.nc -C10 -A50+f7p -Gd10c -LP -T+d8p/2p+l

gmt coast -JH0/? -Glightbrown -Slightblue -c1,0
gmt grdcontour @osu91a1f_16.nc -C10 -A50+f7p -Gd10c -Ln -Wcthinnest,- -Wathin,- -T+d8p/2p
gmt grdcontour @osu91a1f_16.nc -C10 -A50+f7p -Gd10c -LP -T+d8p/2p
gmt subplot end
gmt end show

上述代码是GMT6风格。大概意思如下:
‘REM’表示注释,gmt begin 表示开始,gmt set在本例中修改一些绘图默认值,gmt coast表示正式的绘图开始,这一行是加海岸线,后面各有不同含义,按顺序执行。

如果上面的例子复杂了,也可以打开cmd,运行一行的代码:

1
gmt pscoast -JM6i -Baf -EGB,IT,FR+gblue+p0.25p,red -EES,PT,GR+gyellow -P > map.ps

使用gsview打开ps图片

一副GMT绘制的地图

装换格式使用:

1
gmt psconvert map.ps -A -Tg

Linux

这里以Ubuntu为例。

安装

联网情况下,GMT安装只需要几行命令,不要自己编译。

1
2
sudo apt-get install gmt gmt-dcw gmt-gshhg
sudo apt-get install ghostscript

检查安装是否成功使用,直接在命令窗口输入gmt,出现版本信息即表示安装成功。

使用

Linux下同样采用脚本,把每一行命令写到一个可执行的文本即可。

和Windows有所不同的是,Linux下面有大量的文本处理工具可以使用,比如cat,sed,ls,awk等。

在命令窗口输入:

1
gmt pscoast -JM6i -Baf -EGB,IT,FR+gblue+p0.25p,red -EES,PT,GR+gyellow -P > map.ps

可以得到和Windows一样的结果。

如果使用批处理运行,比如代码已经写进test.sh,则执行./test.sh

学习资源

文档

命令窗口输入gmt docs gmt,可以打开本地帮助。

论坛

有问题可以去论坛提问,这里有许多活跃用户。GMT论坛已经更换了很多次,这次看起来比较稳定。

GMT论坛地址:https://forum.generic-mapping-tools.org/

QQ群

国内有两个千人的群,都比较不错。

GMT QQ群1: 218905582
GMT QQ群2: 791856541

中文社区

有一些翻译的中文手册和案例,可作为初学者参考。

地址:https://gmt-china.org/

github

可以在GitHub搜索到一些共享的例子。

本公众号

初心是提供海洋数据服务,有空会更新一些GMT案例,往往比较实用,且别处找不太到。

其他

另外,还有许多的个人网站和博客,不一一列举。

MATLAB,Python,Julia的GMT版本

GMT MATLAB和Julia相对成熟,特别是MATLAB版本完美结合GMT,实现互相调用数据。Julia用的不多,但好像有一些黑科技在里面,可以实现一般GMT做不到事情。Python还在开发中,工具不完全,可以尝尝鲜,但不能替代GMT。

三者程序:https://github.com/GenericMappingTools