GMT5(The General Mapping Tools)初探の安装、配置、运行

由于日常接触的地图和地形文件比较多,而日常使用的NCL、Python、R就绘制地形图或者行政区域地图,就功能上还是没那么专一,而作为气象背景的人,天然地长期处于技术封闭、交流不畅的氛围之下。源于之前处理GeoTIFF的一点启发,觉得把地图绘制得科学性很强,同时又极具视觉感,是大有裨益的。而暂时手头没有Windows的电脑,无法使用arcGIS,那就自然想到了更多跨平台、开源的软件,GMT是不二之选!

0.啥也别说,先上图!(图床,七牛云免费服务器空间由于需要备案,否则链接失效,macOS上开源客户端:Qbox)




















1.GMT安装,以macOS为例

安装 Homebrew:
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装 GMT:
$ brew update && brew upgrade
$ brew install gmt

安装 ghostscript:
$ brew install ghostscript

测试安装是否成功:

$ gmt –version
5.4.5

*如果是使用的dmg安装包安装的话,
*

1.下载:gmt-5.4.5-darwin-x86_64.dmg

2.双击 dmg 包以解压,将解压得到的 GMT-5.4.5.app 拖动到 Applications 目录即可。GMT 默认会安装到 /Applications/GMT-5.4.5.app/ 目录下。

3.将如下语句:

export PATH=${PATH}:/Applications/GMT-5.4.5.app/Contents/Resources/bin

加入到 ~/.bashrc 中即可。

4.测试安装是否成功:

$ gmt --version 5.4.5

2.GMT环境变量配置、中文支持、运行

  • 以macOS为例,如果之前用是zsh的终端环境,在此最好,切换为bash环境,至少是环境变量文件:/.bashrc或/.bash_profile要修改过来,并添加。(homebrew安装最为推荐!!!)
1
2
3
4
5
# GMT
export GMT5HOME=/usr/local/Cellar/gmt/5.4.5_3/
export PATH=${GMT5HOME}/bin:$PATH
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GMT5HOME}/lib
export GMT_DATADIR=/Users/zhpfu/Downloads/GMT/GMTDB
  • 中文支持

ghostscript的中文支持

  1. 下载脚本 cjk-gs-integrate.pl 3. cjk-gs-integrate.pl 脚本的执行依赖于命令 kpsewhich,该命令由 TeXLive 提供。

  2. 执行 kpsewhich –version 检查 kpsewhich 这个命令是否存在。若不存在,则需要单独安装。使用homebrew安装安装:

brew cask install basictex

  1. 执行脚本:

$ sudo perl cjk-gs-integrate.pl
该脚本会自动搜索系统中自带的中文字体,并生成gs支持中文所需的配置文件。
如果操作无效,说明basictex的环境变量没有起作用,需要手动添加到~/.bashrc中:
export PATH=/usr/local/texlive/2018basic/bin/x86_64-darwin:$PATH

  1. GMT的中文支持
    在 ~/.gmt(若无该文件夹,请自行新建)下创建字体配置文件:

$ touch ~/.gmt/PSL_custom_fonts.txt
$ open ~/.gmt/PSL_custom_fonts.txt

  1. 打开 GMT 字体配置文件,在文件中加入如下语句:
1
2
3
4
5
6
7
8
STSong-Light-UniGB-UTF8-H  0.700    1
STFangsong-Light-UniGB-UTF8-H 0.700 1
STHeiti-Regular-UniGB-UTF8-H 0.700 1
STKaiti-Regular-UniGB-UTF8-H 0.700 1
STSong-Light-UniGB-UTF8-V 0.700 1
STFangsong-Light-UniGB-UTF8-V 0.700 1
STHeiti-Regular-UniGB-UTF8-V 0.700 1
STKaiti-Regular-UniGB-UTF8-V 0.700 1

这几句话分别添加了宋体、仿宋、黑体和楷体四种字体的横排和竖排两种方式。

  1. gmt pstext -L命令查看 GMT 当前的字体配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ gmt pstext -L
Font # Font Name
------------------------------------
0 Helvetica
1 Helvetica-Bold
... ......
39 STSong-Light-UniGB-UTF8-H
40 STFangsong-Light-UniGB-UTF8-H
41 STHeiti-Regular-UniGB-UTF8-H
42 STKaiti-Regular-UniGB-UTF8-H
43 STSong-Light-UniGB-UTF8-V
44 STFangsong-Light-UniGB-UTF8-V
45 STHeiti-Regular-UniGB-UTF8-V
46 STKaiti-Regular-UniGB-UTF8-V

其中 39-46 号字体为新添加的中文字体。以后要用中文字体时,需要用这些编号来指定字体,也许你的机器上的编号和这里不同。请自行确认你的中文字体编号。如果编号不是39到46,请自行修改以下测试脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
gmt set FONT_TITLE 25p,41,black
gmt set FONT_LABEL 15p,39,black

gmt pstext -R0/8/0/4 -JX12c/4c -Bxaf+l"X轴" -Byaf+l"Y轴" \
-BWSen+t"中文标题" -F+f -P > GMT_Chinese.ps << EOF
2 3.5 25p,39,black 宋体横排
2 2.5 25p,40,blue 仿宋横排
2 1.5 25p,41,red 黑体横排
2 0.5 25p,42,green 楷体横排
4 3.5 25p,43,black 宋体竖排
5 3.5 25p,44,blue 仿宋竖排
6 3.5 25p,45,red 黑体竖排
7 3.5 25p,46,green 楷体竖排
EOF
gmt psconvert -A -P -Tf GMT_Chinese.ps
gmt psconvert -A -P -Tg GMT_Chinese.ps

rm gmt.*

注意:生成的 PNG、JPG格式的图片中可直接显示中文,而生成的 PDF 文件用 macOS 自带的 PDF 预览工具打开无法显示中文,使用 Adobe Reader 打开则可以正常显示中文。

3.GMT绘图示例

示例1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
R=65/18/117/45+r
J=B90/0/40/30/6.5i
PS=GMT_tutor3.ps
D=earth_relief_03m.grd

gmt gmtset FONT_ANNOT_PRIMARY 10p

# 裁剪区域地形数据
gmt grdcut $D -R55/120/10/50 -GTibet.grd

# 计算区域地形梯度
gmt grdgradient Tibet.grd -A0 -Nt -Gint.grad

# 利用psbasemap确定格网标注等参数
gmt psbasemap -R$R -J$J -B10g10 -BwSEN -K > $PS

# 绘制地形
gmt grdimage -R$R -J$J -Bg10 Tibet.grd -Iint.grad -CTibet.cpt -K -O >> $PS

# 利用pscoast绘制水系、比例尺
gmt pscoast -R$R -J$J -N1/0.5p,white -Ia/0.15p,177/178/183 -I1/0.5p,61/99/172 -C81/174/254 -Lg86/18+c30+w1000+u+f -K -O >> $PS

# 绘制两个色标
gmt psscale -Dx-0.3i/1.4i+w2.5i/0.15i+ma -CTibet.cpt -G1600/9000 -By+lm -Bxa1000f200 -K -O >> $PS
gmt psscale -Dx-0.3i/0+w1.3i/0.15i+ma -CTibet.cpt -G-3500/0 -L -O >> $PS

gmt psconvert -A -P -Tg $PS

rm gmt.* Tibet.grd int.grad

chmod 777 GMT_tutor3.sh
./GMT_tutor3.sh

出图效果:

示例2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
R=70/138/13/56
J=M105/35/6.5i
PS=CN-capitals.ps

gmt set MAP_GRID_PEN_PRIMARY 0.25p,gray,2_2:1
gmt set FORMAT_GEO_MAP ddd:mm:ssF MAP_FRAME_WIDTH 3p
gmt set FONT_ANNOT_PRIMARY 7p
# 设置比例尺标签为35号中文字体
gmt set FONT_LABEL 8p,35 MAP_LABEL_OFFSET 4p

# 绘制中国地图
gmt pscoast -J$J -R$R -G244/243/239 -S167/194/223 -B10f5g10 -Lg85/17.5+c17.5+w800k+f+u+l'比例尺' -K > $PS
gmt psxy CN-border-La.dat -J$J -R$R -W0.4p,gray50 -K -O >> $PS

# 绘制省会位置
## 此处使用两次 psxy 命令以实现图中所示的空心圆叠加实心圆的效果
gmt psxy CN-capitals.dat -J$J -R$R -Sc0.08c -Gblack -K -O >> $PS
gmt psxy CN-capitals.dat -J$J -R$R -Sc0.15c -W0.2p,black -K -O >> $PS
# 绘制省会名称
gmt pstext CN-capitals.dat -J$J -R$R -F+f7p,35+j -Dj0.15c/0.15c -K -O >> $PS
# 标记北京所在位置
echo 116.46 39.92 | gmt psxy -J$J -R$R -Gred -Sa0.4c -K -O >> $PS

# 绘制南海区域
R=105/123/3/24
J=M1.1i
gmt psbasemap -J$J -R$R -B0 -X5.4i --MAP_FRAME_TYPE=plain --MAP_FRAME_PEN=1p -K -O >> $PS
gmt pscoast -J$J -R$R -N1/0.1p -W1/0.25p -G244/243/239 -S167/194/223 -K -O >> $PS
gmt psxy CN-border-La.dat -J$J -R$R -W0.25p -O -K >> $PS
echo "南海诸岛" | gmt pstext -J$J -R$R -F+f10p,35+cBC -D0c/0.1c -N -Gwhite -O >> $PS

gmt psconvert -A -P -Tg $PS
rm gmt.conf gmt.history $PS

执行:
chmod +x CN-capitals.sh

./CN-capitals.sh
出图:

4.GMT相关资源汇总

参考网站:(表示感谢!)

官方网站:夏威夷大学
官方手册
中文社区
中文手册
台湾手册
推荐博客:赵志远博客
推荐博客:GMT5 教程 | 編者: Po-Chin Tseng
推荐博客:SeiMan USTC地球物理学博士
推荐博客:Beauty is life
推荐博客:Gina Schmalzle
推荐博客:科学网-杨峰峰
colorbar一览(cpt-city)
Hue取色器

有任何问题都欢迎交流探讨,共同学习进步!


-------------本文结束 感谢阅读-------------
作者Gavin
有问题请在相应页面留言(评论系统DISQUS需要"翻墙"才可见)
或者私信给我 GMAIL: zhpfu.atm@gmail.com
满分是10分的话,这篇文章你给几分
--> -->