GMT from 4 to 6
Contents
GMT(The Generic Mapping Tools) 主要有 4, 5, 6 三个版本。GMT4 在2018年7月发布最终版本后,停止维护。为紧跟时代,打算学习 GMT6 绘图。本篇博客主要记录本人在 ubuntu 系统下从
GMT4
迁移到GMT6 现代模式
的学习过程。
1. GMT6 安装
为了在 GMT 6 使用熟悉之前保证能顺利画图,先不卸载 GMT4,然后安装 GMT6 过程中通过对环境变量的设置加以区分。
有三种安装方式。第一种只针对于 Ubuntu 20.04 用户,以下命令即可实现安装:
$ sudo apt-get install gmt gmt-dcw gmt-gshhg
$ sudo apt-get install ghostscript gdal-bin graphicsmagick ffmpeg
# 分别查看 GMT4 和 GMT 6 是否安装成功
$ gmt --version
$ psxy -
如果 GMT4 和 GMT6 只安装成功了一个,请参考下面 GMT4&6 共存
。
第二种通过 conda
安装,详细参考: 跨平台GMT安装方案
第三种通过编译 GMT 源码安装(以下)。
1.1 安装依赖软件
# 安装编译所需软件包
$ sudo apt-get install build-essential cmake libcurl4-gnutls-dev libnetcdf-dev
# 安装可选软件包
$ sudo apt install ghostscript gdal-bin libgdal-dev libglib2.0-dev libpcre3-dev libfftw3-dev liblapack-dev
# 安装制作动画所需的软件包
$ sudo apt install graphicsmagick ffmpeg
1.2 下载源码及数据
GMT4 安装路径为 /opt/GMT-4.5.14/
,在 /opt/GMT-4.5.14/share/coast/
中可以找到海岸线数据 GSHHG: gshhg-gmt-2.3.7.tar.gz
。或者直接下载:
# GMT 6.0.0 源码 (可替换至 GMT6 的最新版)
$ wget http://mirrors.ustc.edu.cn/gmt/gmt-6.0.0-src.tar.gz -P ~/Downloads/
# 全球海岸线数据GSHHG
$ wget http://mirrors.ustc.edu.cn/gmt/gshhg-gmt-2.3.7.tar.gz -P ~/Downloads/
# 全球数字图表DCW
$ wget http://mirrors.ustc.edu.cn/gmt/dcw-gmt-1.1.4.tar.gz -P ~/Downloads/
1.3 解压缩
$ cd ~/Downloads
$ tar -xvf gmt-6.0.0-src.tar.gz
$ tar -xvf gshhg-gmt-2.3.7.tar.gz
$ tar -xvf dcw-gmt-1.1.4.tar.gz
$ mv gshhg-gmt-2.3.7 gmt-6.0.0/share/
$ mv dcw-gmt-1.1.4 gmt-6.0.0/share/
1.4 编译
$ cd gmt-6.0.0
$ cp cmake/ConfigUserTemplate.cmake cmake/ConfigUser.cmake
# 将 ConfigUser.cmake 以下句子取消注释,并作修改
set (CMAKE_INSTALL_PREFIX "/opt/GMT-6.0.0")
set (COPY_GSHHG TRUE)
set (COPY_DCW TRUE)
set (GMT_USE_THREADS TRUE)
set (GMT_ENABLE_OPENMP TRUE)
$ mkdir build
$ cd build/
$ cmake ..
如果没有报错,证明系统软件满足 GMT 的依赖关系。
Linux/macOS 下编译GMT源码 提到GMT在配置过程中通常会找到 Anaconda 提供的库文件,进而导致配置、编译或执行过程中出错。解决办法是,在 ~/.bashrc 中将 Anaconda 相关的环境变量注释掉,以保证GMT在配置和编译过程中找到的不是 Anaconda 提供的库文件。待 GMT 安装完成后,再将 Anaconda 相关环境变量改回即可。
本人这一步遇到 ~/.pyenv/ 中的文件依赖出现警告信息,注释掉 pyenv 相关环境变量后,仍然无效。于是我彻底清除了 ~/.pyenv 文件夹。
如果碰到 netcdf 等依赖问题,根据报错更新安装(netcdf 要求 >=4.0 且支持 netcdf/hdf5, 可参考 Ubuntu 下安装 netcdf4)。然后删除 build,新建,再进入编译。确保 cmake 没有问题之后,继续:
$ make -j
$ sudo make -j install
2. GMT4&6 共存
打开 ~/.bashrc
,在 GMT4 环境配置命令前加入
export GMT6HOME=/opt/GMT-6.0.0
export PATH=${GMT6HOME}/bin:$PATH
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GMT6HOME}/lib64
比如本人的 GMT 环境配置为:
######## GMT6.0.0 ##########
export GMT6HOME=/opt/GMT-6.0.0
export PATH=${GMT6HOME}/bin:$PATH
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GMT6HOME}/lib64
######## GMT4.5.14 ##########
export GMT4HOME=/opt/GMT-4.5.14
export PATH=${GMT4HOME}/bin:$PATH
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GMT4HOME}/lib64
$ source ~/.bashrc
# 测试 GMT4 是否运行
$ psxy -
psxy 4.5.14 [64-bit] - Plot lines, polygons, and symbols on maps
# 测试 GMT 6 是否安装成功
$ gmt --version
6.0.0
提示!
查看主目录下面是否有 .gmt 文件存在,如果存在,
则需要删除该文件之后新建一个名为 .gmt 的文件夹,来存放 gmt6 运行时的中间文件。
$ sudo rm -rf ~/.gmt
$ sudo mkdir ~/.gmt
$ sudo chmod 777 ~/.gmt
3. 两种模式
GMT6 引入了一种全新的绘图命令执行模式——现代模式 (Modern mode)。GMT4&5 命令风格称为经典模式 (Classic mode)。GMT6 既支持经典模式也支持现代模式。
/ | 经典模式 | 现代模式 |
---|---|---|
图层顺序 | -K 和 -O 选项 | 不需考虑 |
重定向 | > 和 » | 不需考虑 |
画布摆放方式 | -P (-L) 选项 | 自动摆放 |
PS文件 | 需要给定 | 无需考虑 |
必选选项 | -R 和 -J | 对每个命令非必须 |
其他图片格式 | 支持,但需单独转换 | 可直接生成 |
纸张大小 | 提前设定,手动裁剪 | 默认无穷大,自动裁剪白边 |
子图模式 | 通过 -X 和 -Y 选项 | subplot 和 inset |
单个命令示例如下:
# 经典模式 GMT4 脚本:
$ pscoast -Rg -JH15c -Gpurple -Ba60f20 -P > GMT4_classic.ps
$ gs GMT4_classic.ps
# 经典模式 GMT6 脚本:
$ gmt pscoast -Rg -JH15c -Gpurple -Baf -P > GMT6_classic.ps
$ gs GMT6_classic.ps
# 现代模式 GMT6 脚本:
$ gmt coast -Rg -JH15c -Gpurple -Baf -png GMT6_modern
4. 其他
-
如果提示 GSHHG 出问题,可以在 /opt/GMT6.0.0/share/ 中查看是否存在,如果没有,手动移动到此处,将其命名为
coast
。DCW 文件同理,文件夹移动并命名为dcw
。 -
关于 GMT4 到 GMT6 迁移过程中
脚本修改
和新增功能
的学习记录请见另一篇博客 GMT from 4 to 6 SUPPLY . -
GMT 卸载: GMT x (both 4 and 6) 被安装到 /opt/GMT-x.x.x 目录下。若想要卸载GMT,可以直接删除整个 /opt/GMT-x.x.x 。
-
GMT 更新:先下载新版源码再重新编译安装:
# 例如 GMT 6.0 更新到 GMT 6.2
[1]下载新版 6.2.0 源码:
$ wget https://github.com/GenericMappingTools/gmt/releases/download/6.2.0/gmt-6.2.0-src.tar.gz
[2] 解压
$ tar xf gmt-6.2.0-src.tar.gz gmt-6.2.0/
$ cd gmt-6.2.0/
[3] 必要的更新
$ sudo apt-get install build-essential cmake libcurl4-gnutls-dev libnetcdf-dev
$ sudo apt install ghostscript gdal-bin libgdal-dev libglib2.0-dev libpcre3-dev libfftw3-dev liblapack-dev
$ sudo apt install graphicsmagick ffmpeg
[4] 编译
$ cp cmake/ConfigUserTemplate.cmake cmake/ConfigUser.cmake
# 将 ConfigUser.cmake 以下句子取消注释,并作修改
set (CMAKE_INSTALL_PREFIX "/opt/GMT-6.2.0")
set (COPY_GSHHG TRUE)
set (COPY_DCW TRUE)
set (GMT_USE_THREADS TRUE)
set (GMT_ENABLE_OPENMP TRUE)
$ mkdir build
$ cd build/
$ cmake ..
# 检查编译情况是否正常
[5] 安装
$ make -j
$ sudo make -j install
[6] 更改环境变量
$ vi ~/.bashrc
6.0.0 更为 6.2.0
$ source ~/.bashrc
[7] 将旧版本中的 coast 和 dcw 以及 cpt 等文件移动到新版本中,例如
$ sudo rm -rf /opt/GMT-6.2.0/share/cpt
$ sudo mv /opt/GMT-6.0.0/share/cpt /opt/GMT-6.2.0/share/cpt
# 删除旧版本
$ sudo rm -rf /opt/gmt-6.0.0
Author Qiang
LastMod 2021-06-07