等値線図の典型として、地形図の等高線の次にあげられるのが天気図の 等圧線です。そこで、ここでも気候データを例として用意しました。 (ただし、いまから見ると古いデータで、気候を見たいときのよい例ではありません。)
結果の一例: contclimによるアジアの11月の気温
プログラムは、
contclim.f
[link] です。
世界全体と、緯度・経度それぞれ120度の部分の作図が選択できます。
ただし、Cでは、海岸線などをかく部分はまだできていません。
格子点型の気候データを読むサブルーチンが、
同じディレクトリの
rclimg.f
[link] にあります。
その他にいくつかサブルーチンのあるファイルをINCLUDEします。
[GKSを使ったプログラム例]、
[GKSによるデータの可視化の例: 地点気候データの散布図など]、
[等値線(コンター): 実例による説明]
のいずれかで紹介したものです。
ここで使う気候データは、
climncar.zip
[link]として
zip でまとめてあります。
ダウンロードして展開すると、climncar というディレクトリの下にファイルがならびます。
(この zip アーカイブには、あとの
[矢印によるベクトル量の場の表示(例)]で使うデータもふくめてあります。)
実行するときは、データが
datapath.fi
に dapath
という文字列で指定された
ファイルパス名の下の、climncar
というディレクトリにあることを
想定しています。
置く場所を変えたいときは、
datapath.fi
を書きかえるなどの方法をとってください。
気温、気圧それぞれ、12か月それぞれのデータがあります。
データファイルの名まえは、次のようにつけられています。
(.sh
でおわっていても、シェルスクリプトではありません。)
tsurf01.nh 地上気温、 1月、北半球 pseal 海面更正気圧、 02 2月 sh 南半球
プログラム中でファイル名を入力するところでは、 tsurf01 とか pseal02 のように答えてください。 それぞれについて、南北両半球のデータを読むようにしてあります。 それから、全世界(global)ならば 1、地域を限定するならば 0 を答えます。 続いて、等値線のいちばん下のレベル、間隔、本数を入力すると 仕事を始めるようになっています。 地域限定の場合はr、さらに、図の左端の経度、下端の緯度をそれぞれ入力する 必要があります。単位は「度」で、東経・北緯を正、西経・南緯を負とします。
気温の単位は摂氏(セルシウス)度で、数値の範囲は約 -70 から 50 です。 気圧の単位は hPa (= mb) で、数値の範囲は約 960 から 1060 です。 海面更正気圧というのは、実際には海面より高い陸上で気圧をはかっていますが、 仮に海面の高さではかったらどういう値になるかを推定したものです。
データは、緯度・経度それぞれ5度間隔の格子点の値として用意されています。 これは、1969年ごろに、アメリカ合衆国の国立大気科学研究センター(NCAR)が アメリカ海軍気象部との共同研究で、それまで約30年間の気象観測値を 集計し、格子点での値を推定したものです。 (不規則に分布する観測点のデータから格子点での値を推定する方法に 関してもいろいろ議論することはあるのですが、ここでは省略します。)
等値線の色を、値が正のとき赤、負のとき青になるようにしてみましたが、
気圧の場合は常に正ですから、別の値(たとえば 1000)を境に色を変えた
ほうがよかったかもしれません。また、いくつかおきに色を変えて強調する方法
([等値線: 空間次元をもつ時間発展問題]
の記事で紹介した contk.f
参照) もあります。
海岸線や国境線も重ねて表示することにしました。その部分については、
[GKSによるデータの可視化の例: 地点気候データの散布図など]
の (3) kikotizu.f
と同様です。線の通る位置の緯度・経度をファイルから読んで折れ線で
つないでいるだけです。
そのデータは、今のところNCARの1985年現在のものです
(したがってソ連が分割されていません)。
ただし、世界の一部の地域の作図は、今のところ、手抜きをしています。 サブルーチンdrawc4を使って 世界全体について等値線を引こうとしており、 GKSのクリッピング機能によってviewportの外には作図されないように なっているにすぎません。これは計算のむだでもあり、また、地図投影した 上に等値線をひくように改造したときには、よけいな線をひいてしまう おそれがあります。メインプログラムを、rclimg で読みこんだデータのうち 作図するべき範囲だけを切り出してdrawc4に渡すように改造するか、 あるいはrclimg を必要な範囲のデータだけを返すように改造するべきです。