GMTで描こう Part 1
GMTとは
GMT(The Generic Mapping Tools)は地球科学の分野でよく利用されている高機能なGIS(地理情報システム)ソフトウェア群です。Paul Wessel、Walter H. F. Smithの2氏により開発されており、LGPLで公開されているオープンソースソフトウェアで、ユーザーは無料で使うことができます。クロスプラットフォームであり、Unix系OS、macOS、Windowsで利用できます。
このソフトウェアはGUIではなく、コマンドラインまたはシェルスクリプトを組んで利用します。シェルスクリプトの書き方次第で、地図だけではなくグラフ・図形などさまざまな図を作成することができます。
2021年4月現在の最新版はversion 6.1.1で、macOSではHomebrewでこのバージョンをインストールし利用することができます。LinuxディストロではUbuntuのaptにおいてversion 6.0.0が利用可能です。そのほかのLinuxでは最新版ではなく、少し前のversion 5が利用可能な場合が多いようです(CentOS7のyum、Gentoo Linuxのportageではversion 5.4.4でした)。
メジャーバージョン6(以降、GMT6)からはmodern GMT mode(以降、モダンモード)が導入されて、バージョン5系(GMT5)でのスクリプトの書き方とは異なる点がいくつかあります。ここではGMT6を扱っていくこととします。
GMT6のインストール
macOS
Homebrewでインストールします。
$ brew install gmt
先頭の$
はプロンプトです。以降同様の書き方をします(#
はスーパーユーザーのプロンプトとします)。
Ubuntu
Ubuntu 20.04.2 LTSではaptコマンドでversion 6.0.0をインストールできます。
# apt install gmt
...
$ gmt --version
6.0.0
GMT6の基本構文
GMT6のモダンモードでは、以下の基本構文に従ってシェルスクリプトを作成します。
#!/bin/bash
...
gmt begin output-file extension
command
gmt module options ...
...
gmt end [show]
モダンモードではGMTでの一連の処理は、gmt begin
で始まり、gmt end
で終了します。gmt begin
の後ろには、 output file
に出力したいファイル名を、extension
にそのファイルの拡張子(psやpngなど)を書きます。インデントしている中段には、実行したい一般のコマンドやGMTコマンドを書きます。GMTコマンドは、コマンドのgmt
、モジュール名、複数のオプションからなります。
まずはグラフの枠を描く
それではまずはグラフの枠を描いてみましょう。グラフの枠を表示させるにはbasemap
モジュールを使用します。好きなエディタ、任意のファイル名でシェルスクリプトを書きます。
$ vim plot.sh
#!/bin/bash
gmt begin plot png
gmt basemap -R0/80/0/60 -JX8c/6c -Ba20f10 -B+gcyan+t"My first plot"
gmt end
パーミッションを実行可能に変更して、スクリプトを実行します。
$ chmod u+x plot.sh
$ ./plot.sh
すると以下の図(plot.png)を得ることができます。

これでグラフの枠を書くことができました。
basemap
モジュールのオプションを解説します。上で実行したコマンドは次の通りです。
gmt basemap -R0/80/0/60 -JX8c/6c -Ba20f10 -B+gcyan+t"My first plot"
-R0/80/0/60
: グラフの描画する範囲(Range)を指定します。/
で区切られた4つの数字はそれぞれ、x軸の最小・最大、およびy軸の最小・最大を指定しています。-JX8c/6c
: グラフの投影法(projection)を指定します。-J
の後ろにX
またはx
を指定すると、二次元直交座標で描画します。その後ろの8c/6c
は横8cm縦6cmの意味で、大文字のX
を指定した場合は描画する矩形領域の大きさを、小文字のx
を指定した場合は数値1当たりの大きさを表します。- 二つの
-B
: 領域の境界(Border)部分の設定をしています。- 一つ目の
-Ba20f10
: グラフの軸の数字とティックマーク(小さな目盛)の間隔を指定します。a20
は数字を書く間隔を20ごとに、f10
はティックマークを描く間隔を10ごとにするよう設定しています。追加でg10
を加えると、グラフにグリッド線を引くことができます。 - 二つ目の
-B+gcyan+t"My first plot"
:+gcyan
は領域をcyanで塗りつぶすように指定しています。+g<color>
で好きな色に塗りつぶすことができます。+t"My first plot"
はグラフのタイトルを書き出す設定です。
- 一つ目の
basemap
モジュールは「枠」を描画するのみの機能となっていますが、他のモジュールを追加して実行することで、さまざまなグラフを表現することが可能となります。
地図を描く
次に日本地図を描いてみましょう。ただし普通のメルカトル図法では面白くないので、ランベルト正角円錐図法(Lambert conformal conic projection, LCC)という図法を使って描画したいと思います。
この図法は、北極が中心となるように地球に円錐を被せて、地球表面を円錐の側面に投影し、その円錐を切り開いて平面に展開するという図法です。ここで地球表面と円錐が交差する線(円)を標準緯線(standard parallel)といい、平面にした地図上で長さが正しく表現されます。標準緯線が1本の場合と2本の場合があり、前者は1標準緯線型(接円錐型)、後者は2標準緯線型(割円錐型)と呼ばれます。この図法については国土地理院の記事とWikipediaの記事を参照してください。
それではGMTで描画してみましょう。海岸線を描くにはcoast
モジュールを使います。図法を指定するオプションは-Jl
(小文字のL、Lambert)です。次のようなシェルスクリプトを書きます。
#!/bin/bash
gmt begin map png
gmt coast -Jl139/33/32.7/43.3/1:25000000 -R119/159/19/47 \
-W -Ba10f2.5g5 -B+t"Ocean Map around Japan" -Gtan -Sskyblue
gmt end
これを実行すると次の図を得ることができます。

オプションの解説をします。
-Jl139/33/32.7/43.3/1:25000000
:139/33
では中心となる経線/緯線を指定します。32.7/43.3
は2つの標準緯線を指定しています(つまり2標準緯線型です)。最後の1:25000000
は縮尺です。-R119/159/19/47
: これは描画の範囲を指定しています。東経119度から159度、北緯19度から47度の意味です。-Gtan
:-G
オプションは陸域の塗りつぶしの色を指定します。ここではタンを選びました。-Sskyblue
:-S
オプションは水域(湖を含む)の塗りつぶしの色を指定します。ここではスカイブルーを選びました。
まとめ
GMT6の基本的な書き方を紹介しました。このソフトウェアにはまだまだたくさんの機能が入っているので、少しずつ紹介していきたいと思います。次回はplot
モジュールを扱う予定です。