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/
有任何問題都歡迎交流探討,共同學習進步!