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モジュールを扱う予定です。

参考文献

  1. Tutorial: Session One – GMT 6.1.1 Documentation
  2. Cookbook: 6. GMT Map Projections – GMT 6.1.1 Documentation
  3. いちからはじめるGMT(GMT4の情報ではありますが、オプションの説明が丁寧でわかりやすいサイトです)
  4. 測量に関するミニ知識 第22回 ランベルト正角円錐図法 | 国土地理院
  5. ランベルト正角円錐図法 – Wikipedia

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次の記事

GMTで描こう Part 2: plot