本文面向GMT的初学者或者即将打算学习GMT的新人。
GMT简介
GMT是一套地学绘图的工具,可以输出高质量的论文插图,并具备优秀的数据处理工具,比如进行网格插值、数据筛选、空间滤波甚至重力场反演等。GMT在测绘、地球物理、海洋、遥感等领域有广泛的使用,GMT通常被指定为研究生必备技能之一。然而由于其采用命令行模式,有一定的学习门槛。不过掌握之后,会大大提高科研生产力。
GMT由美国夏威夷大学Paul教授等人开发,至今已有30多年历史,且仍旧在更新维护。中国也有一批热衷于更新GMT的粉丝。
下面分Windows和Linux来介绍安装GMT使用。
Windows
安装
需要准备的程序:
- GMT可执行程序,地址:https://github.com/GenericMappingTools/gmt/releases/tag/6.3.0
- GhostScript,地址:https://www.ghostscript.com/releases/gsdnld.html
- gsview(可选), 地址:https://pages.cs.wisc.edu/~ghost/
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 | REM GMT EXAMPLE 01 |
上述代码是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 > .ps |
使用gsview打开ps图片
装换格式使用:
1 | gmt psconvert map.ps -A -Tg |
Linux
这里以Ubuntu
为例。
安装
联网情况下,GMT安装只需要几行命令,不要自己编译。
1 | sudo apt-get install gmt gmt-dcw gmt-gshhg |
检查安装是否成功使用,直接在命令窗口输入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 > .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
中文社区
有一些翻译的中文手册和案例,可作为初学者参考。
github
可以在GitHub搜索到一些共享的例子。
本公众号
初心是提供海洋数据服务,有空会更新一些GMT案例,往往比较实用,且别处找不太到。
其他
另外,还有许多的个人网站和博客,不一一列举。
MATLAB,Python,Julia的GMT版本
GMT MATLAB和Julia相对成熟,特别是MATLAB版本完美结合GMT,实现互相调用数据。Julia用的不多,但好像有一些黑科技在里面,可以实现一般GMT做不到事情。Python还在开发中,工具不完全,可以尝尝鲜,但不能替代GMT。