地理データの可視化--GMTを使う
可視化の必要性, 人間と機械の役割分担
- 文字の形で人が読みきれないだけの量のデータを処理する必要がある。
- 機械が得意とすること--定型処理のくりかえし
- (一定以上の視力のある)人間が得意とすること--空間パタンの認識
GMTとは
- Generic Mapping Tools。
Paul Wessel (ハワイ大学), W.H.F. Smith (NOAA) 両氏によるフリーソフトウェア。
C言語によるソースプログラムがインターネット上で公開されている。
オリジナルWebサイト gmt.soest.hawaii.edu (FTPもある)、
ミラーサイト ftp://ftp.scc.u-tokai.ac.jp/pub/gmt 。
2007. 5. 2現在の最新版はversion 4.2.0 (2007. 4. 1)。
2006年度秋学期にCNSにインストールしてあったものはversion 4.0 (2004. 10. 1)。
- 地球上(緯度経度座標)に分布する数量のデータを地図上に作図することができ、
一般のx-yグラフを作ることもできる。
ただし、作者の専門が地球物理系のため、連続量を得意とし、名義型(nominal)変数は
(処理可能ではあるが)不得意である。
- 出力はPostScript (PS) 形式のファイルであり、基本的に機器に依存しない。しかも印刷原図として使える質のものである。
- Unixの上で動くコマンドであり、ユーザーが複数のGMTコマンドを組み合わせるシェルスクリプトを書いて使うのがふつう。(本格的プログラミングは必要としないが、やや技巧的な表記が必要。)
なおWindowsのコマンドプロンプトでも動くものがある。
- 図は伸縮自在とは言えず、ある程度、紙上の寸法を意識する必要がある。
単位はcmまたはインチ。
- 3.3.3以後の版では、フォントを指定すれば日本語文字も出力できる。
ここで扱うデータとプログラムの構造
空間座標
空間構造からみた地理データの種類
- 広い意味のvector型
- 格子型 (raster型)
- 格子点に値(grid registration)
- ます目に値(pixel registration)
テキストとバイナリ (コンピュータ側から見たデータの種類)
- ディジタルコンピュータが扱う対象は本来すべてbinary (2進数)。
- しかし、人が読める文字と改行コードだけからなるデータをテキストデータ、
それ以外をバイナリデータということが多い。
- テキストデータの詳しい形式はOS (operating system)ごとに違う。
他のOSで作られたテキストデータを読むときはバイナリデータとして扱う必要があることもある。
- プログラム言語の機能として、一定の基準を満たしたバイナリデータを読み書きできるが、OSやコンパイラが違う場合、同じプログラムで同じように読めるとは限らない。
- OSが違っても一定のプログラムライブラリを使えば読み書きできるバイナリデータの形式の約束がいくつかある。netCDFはその一つ。
データの論理的構造としての表(table)形式
- (Relational databaseというデータベース用データ構造の基本)
- (Unixで一般的なawkなど多くのソフトウェアで想定している形式)
- 一定の数の行×列からなっている。
- 列の順序は意味を持つことがある。
- 行の順序は意味をもたない。
- ある列(複数のこともある)をキーとしてデータを同定できる。
テキストファイルでの表の表現
- (いずれも、表の行はテキストファイルの改行で表現)
- スペース区切り(複数のスペースは1つのスペースと同じ)
- コンマ区切り(複数のコンマが続いたときは空文字列がある)
- タブ(tab)区切り
- 固定長フィールドのテキストファイル
GMTが扱うことができるデータの形式
- 格子点データ
- バイナリ形式: grdファイル (UCAR UnidataのnetCDFというプログラムライブラリを利用)
- テキスト形式: xyzファイル。各行に x(地理データの場合経度), y(緯度), z(対象となる量)が1つずつスペース区切りでならんだ表
- 広い意味のvector型データ
- テキスト形式: xyzファイル (zがない場合もある)
- バイナリ形式: 海岸線などGMT付属のデータ専用 (netCDFを利用)
フィルター型プログラムの活用
- 特にテキストファイルを扱うプログラムは、標準入力を読んで標準出力に書くフィルター型に作ることが多い。また、awkは汎用のフィルターと言える。
- プログラム <ファイル (標準入力)
- プログラム >ファイル (標準出力、ファイルは新規作成または上書き)
- プログラム >>ファイル (標準出力、ファイルに追加)
- プログラム | プログラム (標準出力から標準入力へのパイプライン処理)
- プログラム <<文字列 (ここに指定した文字列が出るまで、シェルスクリプト中の行がプログラムの標準入力となる)
GMTで使うためのデータの準備
- 表データをテキストファイルとして作成する。入力には表計算ソフトウェアを使うことが多い(合計のチェックや修正に便利)。エディタでもよい。データはスペース区切りまたはコンマ区切りとし、区切りと同じ文字を文字列中に含めないようにしておく(データが空白またはコンマを含むときは適当に変換しておく。引用符には頼らない)。あるいは、固定長フィールド形式でもよい。1地点の情報が1行になるようにしておくと次の段階が簡単になる。
- awkでGMTが要求するxyzファイルに変換する。スペース区切りはそのまま、
コンマ区切りの場合は「BEGIN { FS=","}」を使えば、
データの各列がawkの各列($1, $2, ...)として認識できるので、
必要な列だけprintまたはprintfを使って書き出せばよい。
固定長フィールドの場合は、substr($0, 始め位置、文字数)で切り出す(あるいはFortranの書式つきで読んで書きなおす)。
- 格子点データの場合は、xyzファイルから、
- 格子点の位置で値が得られている場合はxyz2grd
- ブロックごとに代表値を使う場合はblockmedian, blockmean
- 空間内挿が必要な場合はsurface
などによりgrdファイルに変換する。
- 逆にgrdファイルからxyzファイルへの変換はgrd2xyzでできる。
GMTを使うシェルスクリプトの基本構成
- わたしはcshを使っているので、最初の行は「#!/bin/csh -f」。シェルスクリプトはsh, bashで書くべきだという教科書もあるが、会話型利用との表現の共通化を優先した。
- GMTの実行プログラムのあるところ
(2006年秋学期のSFC CNSでは、
Sunでは/pub/sfc/earthobs/prog/gmt/sun/bin、
Linuxでは
/pub/sfc/earthobs/prog/gmt/linux/bin)
をコマンドパスに含める。
設定の方法は別ページ参照。
- 長さの単位として、cmまたはインチを選択。
gmtset MEASURE_UNIT cmまたは
gmtset MEASURE_UNIT inch。
最近の版では、cmが標準になっている。
- 入出力のファイル名はシェル変数にして、初めのほうで文字列を代入する形にしておいたほうが修正しやすい。
- ひとつのPSファイルに書き足していくとき、最初だけ>、次からは>>。
- ひとつのPSファイルに書き足していくときは、毎回オプション -O -Kを使う。
ただし最初は-Oなし、最後は-Kなし。
- GMTのほとんどのプログラムでは、-J (投影法,縮尺) と -R (4すみの数値)を使ってデータの座標値と紙上の位置との対応関係を決める。数値を省略すると直前に決めた関係が使われる。
- 原点移動には-X -Yを使う。最初以外では移動の相対値である。
- オプションの記憶のために、
(Version 4.0から4.1.4まででは)作業時のcurrent directoryに
ピリオドで始まる名前の.gmtdefaults4と.gmtcommands4
(Version 3までは.gmtdefaultsと.gmtcommands)
というファイルが作られるが、わたしにはじゃまなだけなので、シェルスクリプトの最後で消すことにしている。
GMTを使うシェルスクリプトの例
[map_csh] (cshスクリプト)
緯度経度を軸に(つまり正距円筒図法で)世界地図をかく。
(まだ、データの可視化に至らない。)
実際にPostScript出力をするプログラムがpscoast
ひとつなので、
オプション-O
, -K
は使われていない。
スクリプトの最初のほうにある
source
で始まる行は、実行する機種ごとに変える必要がある。
使わないものはコメント(##で始まる)にしてある。
1999-05-11, ..., 2007-05-02
増田 耕一 (MASUDA Kooiti)