GMTをWindowsで使う - #1 スケール付きの地図を描く

## はじめに
地図を中心にさまざまな図を作成できるGMT (Generic Mapping Tools)をWindowsで使う際のスクリプトを紹介していきたいと思います。GMTをWindowsで使うのは少数派かもしれませんが、参考になれば幸いです。初回はスケール付きの地図を描くスクリプトを紹介したいと思います。

## バッチファイルの準備
GMTの公式サイトからWindows用のインストーラーをダウンロードしGMTをインストールしたら、テキストエディタを開いてGMTのスクリプトを書いていくバッチファイルを準備します。バッチファイルは拡張子が「.bat」のファイルです。

:::note info
インストーラーは「gmt-○.○.○-win64.exe」というファイルで、○.○.○にはバージョンが入ります。この記事を書く際にはバージョン6.4.0を使っています。
:::

テキストエディタは何でもいいと思いますが、ここではサクラエディタを使っています。サクラエディタを開き、次のスクリプトを書き込みます。

```
gmt begin output png
  gmt coast -R135/150/30/45 -JM12 -BWeSn -Bxa5f1 -Bya5f1 -Ggray -LjRB+w300+f+l+o1/1
gmt end
pause
```

書き込んだら名前を付けて保存を選択し、ファイル名を「GMTScript.bat」、ファイルの種類を「すべてのファイル」として作業をするフォルダに保存します。

保存したら、「GMTScript.bat」をダブルクリックして実行します。そうすると「output.png」というファイルが作成されます。それを開くと次のような地図になっていると思います。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576166/b81799a9-e0a2-7eb9-5f13-ca69e6b396a7.png">

ちなみに、バッチファイルはダブルクリックすると実行されてしまうので、開いて中身を編集したいときには、右クリックして「編集」を選びます。この場合はメモ帳で開かれると思います。サクラエディタで開きたい場合は、サクラエディタを空の状態で開いておき、そこにバッチファイルをドラッグ＆ドロップすればOKです。

## スクリプトの解説
### GMTのスクリプトの基本
GMTのスクリプトでは、各行で先頭に`gmt`と書き、続いてモジュール名とオプションを書きます。モジュールにはたくさんの種類があり、今回使っている`coast`は海岸線を描いたり、陸・海に色をつけたりするモジュールです。他にも点や線を描く`plot`や文字を書き込む`text`などがあります。コンターやベクトルを描くモジュールもあります。今回は`coast`しか使っていませんが、地図の上にプロットしたり、文字を書き込んだりしたい場合は、`coast`の後に`plot`や`text`の行を追加していけばよいです。

※参考：[GMTのモジュール一覧](https://docs.generic-mapping-tools.org/latest/modules.html)

GMTのスクリプトを書く際には、何かを描画する`coast`などのモジュールが書かれた行を`begin`と`end`で挟んであげます。`end`には特にオプションは必要ありませんが、`begin`の行では出力される画像ファイルのファイル名とファイル形式を指定しておきます。今回はファイル名を「output」、ファイル形式を「png」としています。ファイル形式には「jpg」や「pdf」を指定することもできます。

### coast
`coast`は図のベースとなる地図を描いてくれるので、GMTで最もよく使うモジュールではないかと思います。使えるオプションはたくさんあるのですが、今回は最低限必要なオプションのみ使っています。

`-R`のオプション：描画する範囲を指定します。4つの数字が書かれていますが、順番に「西端の経度/東端の経度/南端の緯度/北端の緯度」となっています。これらの数字は-180～180の値をとり、東経や北緯の場合はプラスの値、西経や南緯の場合はマイナスの値を使います。

`-J`のオプション：描画する地図の図法とサイズを指定します。今回は「M」でメルカトル図法、「12」で図の幅（単位：cm）を指定しています。メルカトル図法では、図のサイズとして幅のみを指定すればよいので、とりあえず地図を描きたい場合はこれを使うのが簡単かと思います。

`-B`のオプション：図の枠の見た目を指定します。3回`-B`が出てきますが、順に、①四方の枠のうちどの枠を描画するか、②x方向の枠の設定、③y方向の枠の設定を指定しています。①の「WeSn」は西、東、南、北のすべての枠を描画するが、小文字になっている東と北の枠では目盛りの数字を描画しない、ということを指定しています。大文字と小文字で意味が異なる点に注意です。枠を描画したくない場合は、その方向の文字を記載しないようにします。②と③では、先頭の「x」や「y」でどちらの方向の枠の設定なのかを指定し、続く記述で目盛りの数字と目盛りの線の間隔を指定しています。「a」に続く数字で目盛りの数字の間隔、「f」に続く数字で目盛りの線の間隔をそれぞれ指定しています。この際、数字の単位は度ですが、数字にmやsをつければ分や秒で指定することもできます。

`-G`のオプション：陸域の色を指定します。色の指定には、数字、RGB、色名などいろいろな方法がありますが、今回は「gray」という色名で指定しています。たいていのオーソドックスな色名は使えますので（red、blue、green、orangeなど）、色名で指定するのが簡単かと思います。ちなみに、`-S`のオプションで海域の色を同じように指定でき、`-W`のオプションで海岸線を描く線の属性を指定できます。`coast`を使用する際にはこれらのオプションのうち必ずひとつは記載する必要があります。

※参考：[GMTでの色の指定](https://docs.generic-mapping-tools.org/latest/gmtcolors.html)

`-L`のオプション：地図中のスケールの設定を指定します。まず、「jRB」でスケールを配置する位置を指定しています。「j」は図の内側に配置することを指定しています（「J」とすると図の外側になります）。位置は左「L」・中央「C」・右「R」のうちの1文字と上「T」・中央「M」・下「B」のうちの1文字の組み合わせで示すことになっており、ここでは「RB」なので図の右下を指定していることになります（この「RB」は「BR」と書いても構いません）。加えて、「+w300」でスケールの長さ（単位：km）、「+f」でスケールの形式（これをつけないとシンプルな線のスケールになります）、「+l」でスケールの単位の記載（これをつけないと単位のkmは記載されません）、「+o1/1」で図の枠からスケールへのx方向とy方向のオフセット（単位：cm）をそれぞれ指定しています。

### 最後のpauseについて
最後の`pause`はGMTのスクリプトではなく、バッチファイルで使えるコマンドのひとつです。最後に`pause`を書いておかないと、バッチファイルの実行とともに現れるコマンドプロンプトのウィンドウが終了とともに閉じてしまいます。ウィンドウが閉じてしまうと、もしGMTのスクリプトでエラーがあったときにそのエラーのメッセージを確認することができなくなってしまいます。ですので、自分でGMTのスクリプトをバッチファイルに書いているときには、念のため最後に`pause`をつけておくようにしています。

## 参考文献
- [The Generic Mapping Tools](https://www.generic-mapping-tools.org/)
- [coast - GMT documentation](https://docs.generic-mapping-tools.org/latest/coast.html)