GMT,全称Generic Mapping Tools,中文一般译为“通用制图工具”。GMT不仅可以用于绘制不同类型的地图,还可以绘制常见的笛卡尔坐标轴(线性轴、对数轴和指数轴)。除此之外,GMT还有一些数据处理和分析的功能,比如多项式拟合、数据滤波、线性回归分析等。
- 1988年,Paul Wessel和Walter H.F. Smith开发了GMT的最原始版本GMT 1.0
- 1991年8月10日,GMT 2.0发布
- 1998年11月8日,GMT 3.x的第一个正式版发布
- 2005年10月1日,GMT 4.x的第一个正式版发布;目前最新版本 GMT 发布于
- 2013年11月5日,GMT 5.x的第一个正式版发布;目前最新版本 GMT 发布于
为什么选择GMT作为绘图软件呢?因为GMT有如下特点:
开源免费
GMT是开源软件,其源码遵循 LGPL 协议。任何人均可自由复制、分发、修改其源代码,也可用于盈利。修改后的代码必须开源但可以使用其他开源协议。
跨平台
GMT的源码采用了高度可移植的ANSI C语言,其完全兼容于POSIX标准,几乎不需修改即可运行在大多数类UNIX系统上。GMT官方网站不仅提供了软件源码,还提供了供 Windows 和 macOS 使用的软件安装包。各大Linux发行版中也提供了预编译的二进制版本。
模块化
GMT遵循UNIX的模块化设计思想,将GMT的绘图及数据处理功能划分到不同的模块中。这样的模块化设计有很多优点:
- 只需要少量的模块
- 各个模块之间相互独立且代码量少,易于更新和维护
- 每一步均独立于独立于之前的步骤以及具体的数据类型,因而可以用于不同的应用中
- 可以在shell脚本中调用一系列程序,或通过管道连接起来,进而绘制复杂图件
高精度矢量图
GMT绘制得到的图件为PS格式,即PostScript,是一种页面描述语言。PS格式是矢量图片格式,可以任意放大缩小而不失真。GMT充分利用PostScript语言的特性,可以生成高质量的矢量图件,并可以很容易地转换为其他图片格式。
GMT的版本号的格式为:
major.minor.patch
其中 major
为主版本号,minor
为次版本号,patch
为补丁版本号。
一般而言,版本号的更新规则如下:
- 当有极大的更新,会增加主版本号
major
,因而major
不同的两个版本在语法和功能上有很大的差异 - 当有较大的更新,比如个别命令的语法有变化,会更新次版本号
minor
- 若更新主要是修复错误,则会增加
patch
的版本号
因而, GMT 5.x.x
与 GMT 4.x.x
之间有很大差异,两个版本的语法是不完全兼容的,切勿混在一起使用。 GMT 4.5.x
和 GMT 4.4.x
,部分命令的语法和用法可能有一点区别。而 GMT 4.5.13
相对于 GMT 4.5.12
,主要是修复了一些BUG。
GMT目前在同时维护GMT4和GMT5两个大版本。用户是选择GMT4还是GMT5呢?
GMT4的优缺点:
- 已发布十年有余,功能相对成熟
- 仅修复Bug,不再增加新功能,命令语法相对稳定
- 网络上的中文教程及示例多采用GMT4语法,新手学习起来更方便
GMT5的优缺点:
- 相对于GMT4有很多改进,命令语法更统一,选项的设计更加合理
- 相对于GMT4加入了更多的新功能
- GMT5是GMT的未来
- 由于重写了大量代码,因而可能有较多的Bug
- 目前关于GMT5的中文教程太少
综上,对于用户的建议是:
- 新用户推荐学习GMT5,毕竟GMT5是GMT的未来,更多新用户的加入也可以更好地促进GMT的发展
- 实验室可能有前人留下的GMT4的代码,若历史负担太重,建议使用GMT4
- 若自己的大型项目中使用了GMT绘图,建议使用GMT4,因为GMT4相对稳定,不至于因为GMT小版本的不兼容而影响到自己的项目
PS:GMT4和GMT5可在系统中共存,因而完全可以同时安装两个版本,旧脚本不必修改,继续使用GMT4,新脚本则使用GMT5语法。
GMT是跨平台的,可以运行在Linux及Windows下,当然也可以运行在 macOS 下,这里姑且认为 macOS 跟Linux是同一个东西。
推荐在Linux下使用GMT,原因如下:
- GMT是在Linux下开发再移植到Windows下的。因而,Windows版本的GMT相对来说有更多的bug
- Linux自带了众多数据处理工具:
gawk
、cut
、paste
等 - Windows下的命令行及bat太难用,Linux下的命令行和Bash脚本相对来说更易用
PS:Windows10即将自带Bash,未来有可能可以在Windows下写Bash脚本,值得期待。
在绘制地图方面,还有一些软件也可以实现类似的功能,可以作为GMT的替代品。