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/

有任何問題都歡迎交流探討,共同學習進步!