[GMT] GMT - The Generic Mapping Tools

GMT(The Generic Mapping Tools)とは、直訳すると"汎用地図作成ツール"となるでしょうか。地球物理や地質学の分野でよく用いられているグラフィックプログラム群で、60種類ほどのプログラムの集合です(ライブラリではない)。出力は綺麗です。地理情報を扱う方は、評価の価値があるでしょう。

[Under Construction] このページは作りはじめたばかりで、まだ不完全です。


* GMTの特徴: どんな図が出るのか

まずは下の図を見て下さい。

[等値線図の例 JPEG 33KB]
等値線図の例
[イメージマップの例 JPEG 33KB]
イメージマップの例

これらはオホーツク海の流氷の量(密接度)を表す図です。グラフの性質上、地図はAlbers図法と呼ばれる、等面積写像を用いています。GMTはPostScriptファイルを出力するのですが、図はこれをJPEG画像に変換したものです。なお、 2枚の図のデータは同じで、表現方法が異なるだけです。

GMTの特徴に関しては、次のページに非常によくまとめられています。まずはこちらをご一読下さい。

-> GMT information(日本語)
(地質調査所のページ内)

マニュアルを読んだときの印象は、たくさんのプログラムを組み合わせて使うので、覚えることが多くて難しいのではないかと感じました。しかし、使ってみての印象は、実に簡単に地図を描けるということです。出力が非常にきれいなのにも感心しました。ちなみに通常のx-yプロットも出来ます。

*GMTの考え方(1):  PostScriptによる高品位出力

GMTの出力は、(Encapsulated) PostScriptです。PostScriptを用いることで、高品位の出力を実現しています。わずかな努力で、非常にきれいなグラフを作成できます。しかしその分、表示や印刷には制限が加わります。

PostScript, Ghostscriptについては、このページの下の方にリンク集があります。参考になれば幸いです。

*GMTの考え方(2):  グラフの重ね書き

GMTを使うときの基本的な考え方は、グラフをどんどん重ね書きしていく、というものです。グラフの枠や地図など、背景を描くためのコマンドと、点や線を描いたり、等値線図やイメージマップを描くコマンド、文字を入れるコマンドなどを順番に呼び出して、グラフを書き込んで行きます。具体的には、上の等値線図の場合には、

  1. 地図(海岸線)を描くプログラムpscoast
  2. 等値線を描くプログラムgrdcontour

を順番に呼び出して、図を作成しました。イメージマップの場合には、この逆に、

  1. イメージマップを描く(grdimage使用)
  2. スケールバー(下にある、値と色の関係を示す棒)を描く (psscale使用)
  3. その上に陸地の図を重ね書きする(pscoast)

の順で描きました。もちろん、この上にさらにグラフを重ね書きすることも出来ます。

*GMTの考え方(3):  スクリプトによるコマンドの固定

上に書いたように、GMTはいくつものコマンドを順番に呼び出して、図を作っていきます。UNIXに慣れている方なら、これをすぐにシェルスクリプトに固めてしまえばいいじゃないか、と思うことでしょう。GMTの作者も、コマンドの呼び出し順序やオプションの指定を、シェルスクリプトに固定して利用することを期待しているようです。

もちろん"シェル"スクリプトでなくともよいはずで、私はデータの変換処理の部分も含めて、Perlによるスクリプトに固定しています。


* GMTのコンパイル

[Under Construction] (この項未完)

*netCDFコンパイル時の注意

GMTのコンパイルには netCDFライブラリが必要です。これのコンパイルについてです。

netCDFはmemmove()という関数を使っていますが、SunOS 4.1.x など、この関数を持たないOSでは、以下のようにbcopyで代用します。引数の順序が違う点に注意。

@SHARP@ifdef BSD
@SHARP@define memmove(d, s, n) bcopy(s, d, n)
@SHARP@endif

修正する必要があるのは、memmoveを用いている src/libsrc/ffio.cおよびsrc/libsrc/posixio.c です。

*GMTコンパイル時の注意

マクロEXIT_SUCCESSなど

上の例と同じくSunOS 4.1.xでは、マクロEXIT_SUCCESS, EXIT_FAILUREがありません(POSIX適合でない?)。したがって以下のようにこのマクロを定義してやる必要があります。

@SHARP@ifndef EXIT_SUCCESS
@SHARP@define EXIT_SUCCESS 0
@SHARP@define EXIT_FAILURE 1
@SHARP@endif

修正する必要があるのは、src/gmt.h, src/pslib_inc.hおよびsrc/gmthex2ras.cです。

数学関数isnanf, isnand

引数がIEEE NaN(Not a Number)かどうかを調べる関数isnanfおよびisnandが無いシステムでは、gmt_math.hを作り直す必要があります。gmt_math.hを作成するスクリプト、 gmt_math_init.cshなどがあるのでそれを参考にして下さい。


* 参考

*おまけ: PostScript, Ghostscript関連リンク

Ghostscriptの利用については、次のページをご覧下さい。ページで紹介している情報量は少ないのですが、リンクは参考になると思います。

-> Ghostcriptの使い方いろいろ

Ghostscriptを用いると、非PSプリンタをPSプリンタとして利用できます。私の作っている「みんなでプリンタを使おう」というページの中で、その方法について説明しています。興味があればご覧下さい。BSD編とSolaris編があります。

-> みんなでプリンタを使おう(BSD編)

-> みんなでプリンタを使おう(Solaris編)


<- トップページ
工学院大学機械工学科流体研

リンクはご自由に。でもメールをくれると嬉しいな。

金野 祥久  konno@researchers.jp

Last modified: Fri Jan 8 22:09:38 JST 1999