GMT5(The General Mapping Tools)初探の安装、配置、运行
- 2020 年 2 月 17 日
- 筆記
欢迎订阅微信公众号:『气象学家』
阅读建议
仅仅就macOS安装GMT5为例来展开,Linux平台和GMT6暂时不介绍。 后续会增加更多气象领域的更多应用实例。安装依据内容目录来按图索骥,根据具体错误来调试。
内容目录
前言介绍图库GalleryGMT安装,以macOS为例GMT环境变量配置、中文支持、运行GMT绘图示例示例1示例2参考网站
前言介绍
由于日常接触的地图和地形文件比较多,而日常使用的NCL、Python、R就绘制地形图或者行政区域地图,就功能上还是没那么专一,而作为气象背景的人,个人技术又比较菜鸡。源于之前处理GeoTIFF的一点启发,觉得把地图绘制得科学性很强,同时又极具视觉感,是大有裨益的。而暂时手头没有Windows的电脑,无法使用arcGIS,那就自然想到了更多跨平台、开源的软件,GMT是不二之选!
图库Gallery
啥也别说,先上图!(图床,
七牛云免费服务器空间,由于需要备案,否则链接失效,macOS上开源客户端:Qbox)



















(上图主要源自:中文社区: https://gmt-china.org/)
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
GMT环境变量配置、中文支持、运行
环境变量配置
以macOS为例,如果之前用是zsh的终端环境,在此最好,切换为bash环境,至少是环境变量文件:~/.bashrc或~/.bash_profile要修改过来,并添加。(homebrew安装最为推荐!!!)
# 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的中文支持
- 下载脚本 cjk-gs-integrate.pl 3. cjk-gs-integrate.pl 脚本的执行依赖于命令 kpsewhich,该命令由 TeXLive 提供。
- 执行 kpsewhich –version 检查 kpsewhich 这个命令是否存在。若不存在,则需要单独安装。使用homebrew安装安装:
brew cask install basictex
- 执行脚本:
$ sudo perl cjk-gs-integrate.pl
该脚本会自动搜索系统中自带的中文字体,并生成gs支持中文所需的配置文件。 如果操作无效,说明basictex的环境变量没有起作用,需要手动添加到~/.bashrc中: export PATH=/usr/local/texlive/2018basic/bin/x86_64-darwin:$PATH
- GMT的中文支持 在 ~/.gmt(若无该文件夹,请自行新建)下创建字体配置文件:
$ touch ~/.gmt/PSL_custom_fonts.txt
$ open ~/.gmt/PSL_custom_fonts.txt
- 打开 GMT 字体配置文件,在文件中加入如下语句:
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
这几句话分别添加了宋体、仿宋、黑体和楷体四种字体的横排和竖排两种方式。
- 用
gmt pstext -L
命令查看 GMT 当前的字体配置:
$ 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,请自行修改以下测试脚本。
#!/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 打开则可以正常显示中文。
GMT绘图示例
示例1
#!/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
#!/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
出图:

参考网站
GMT相关资源汇总. 表示感谢!
1.官方网站 夏威夷大学: http://gmt.soest.hawaii.edu/projects/gmt 2.官方手册: http://gmt-tutorials.org/en/index.html 3.中文社区: https://gmt-china.org/ 4.中文手册: https://docs.gmt-china.org/5.4.5/ 5.台湾手册: http://gmt-tutorials.org/index.html 6.推荐博客 赵志远博客: https://zhaozhiyuan.org/ 7.推荐博客:GMT5 教程 | 編者 Po-Chin Tseng: https://jimmytseng79.github.io/GMT5_tutorials/ 8.推荐博客 SeiMan USTC地球物理学博士: https://blog.seisman.info/gmt-insert-map/ 9.推荐博客 Beauty is life: https://zhongpenggeo.github.io/sites/archives.html 10.推荐博客 Gina Schmalzle: http://geodesygina.com/tag/etopo1.html 11.推荐博客:科学网-杨峰峰: http://wap.sciencenet.cn/blog-2637373-974284.html 12.colorbar一览(cpt-city): http://soliton.vm.bytemark.co.uk/pub/cpt-city/ 13.Hue取色器: http://colorizer.org/
有任何问题都欢迎交流探讨,共同学习进步!