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的中文支持

  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 字体配置文件,在文件中加入如下语句:
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 当前的字体配置:

$ 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/

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