GMT5で地図にスケールをつける

【更新履歴】2020.2.2 スクリプト内のコメントを修正

 

f:id:sfuno:20200101162215j:plain

 

公式サイトの情報を参考に、GMT5でスケール付きの地図を作成してみたので紹介します。地形データにはETOPO1を使用しました。

 

#!/bin/sh

# parameter setting
# map region west/east/south/north
region=128/140/28/36
# map projection and scale 
proj=M18
# frame
frame=WeSn
# xaxis (f: minor tick spacing)
xaxis=x4f2
# yaxis (f: minor tick spacing)
yaxis=y4f2
# master color table
cpt=seafloor
# color table min/max
cptlimit=-6000/0
# input bathymetry grid file name                                   
grdfile=ETOPO1_Bed_g_gmt4.grd
# tmp bathymetry grid file name     
tmpgrdfile=ETOP1_tmp.grd
# output color table file name                 
cptfile=my_seafloor.cpt
# output postscript file name 
psfile=map.ps 

# set default parameter
gmt set FORMAT_GEO_MAP dddF

# cut grid data
gmt grdcut $grdfile -R$region -G$tmpgrdfile

# make color table
gmt makecpt -C$cpt -T$cptlimit > $cptfile

# plot map
gmt grdimage $tmpgrdfile -R$region -J$proj -C$cptfile -K -V > $psfile
gmt pscoast -R -J -Da -Ggray -Wthinnest,black -K -O -V >> $psfile

# plot frame
gmt psbasemap -R -J -B$frame -B$xaxis -B$yaxis -K -O -V >> $psfile

# plot scale
gmt psbasemap -R -J -Lg136.4/28.5+c32N+w300k+f+l+jBL --MAP_SCALE_HEIGHT=10p --MAP_TICK_PEN_PRIMARY=white --FONT_ANNOT_PRIMARY=white --FONT_LABEL=white -O -V >> $psfile

# convert to raseter file
gmt psconvert $psfile -A -Tj -V

# remove tmpfile
rm -f $tmpgrdfile


私の理解が正しければ、"-Lg136.4/28.5+c32N+w300k+f+l+jBL"が意味するところは、以下のようになっています。
・北緯32度の距離での(+c32N)
・300 kmの長さのスケールバーを(+w300k)
・左下が(+jBL
・緯度28.5経度136.4となるように(-Lg136.4/28.5)
・fancyモードで(+f)
・距離の単位(ここでは"km")をバーの上につけて(+l)描く

デフォルトだと黒で描かれて見にくいので、以下のパラメータを一時的に白にすることで見やすくしています。
・MAP_TICK_PEN_PRIMARY
・FONT_ANNOT_PRIMARY
・FONT_LABEL
また、デフォルトだとスケールバーの厚みが小さい印象があったので、MAP_SCALE_HEIGHTを変更しています。