地図をかく (3) 地形の標高を色で表示する

[その (2)] の (62h) でつくった 正距円筒図法 (plate carree) の地図に、地形の標高を表示してみる。

ここでつかうのは、日本の「国土数値情報」の、約 1 km 間隔の格子 (実際は、緯度 2/(3×80) 度、緯度 1/80度 の格子) の標高データである。 あらかじめ、単純バイナリ形式に変換してある。 データ源と変換方法については、つぎのページを見てほしい。

[国土数値情報の標高データを Pythonで読み、作図する (試作版)]

そこに書いたのと同様な方法で、日本全国のデータ を 単純バイナリ (32ビット浮動小数点) 形式に変換し、 niigata の /diskb/kokudo/bindata/elev1km/elev1km_all.r4l として置いた。

つぎのプログラム [63a_kanto_chubu.py] は、 (62h) のプログラムと同じ範囲の図に、 matplotlib の contourf を利用して、標高を段彩で表示するものである。

lonmin, lonmax, latmin, latmax の値をかえることによって、 表示される緯度経度範囲をかえることができる。 日本の範囲でいろいろな値をためしてみてほしい。

(origlon, origlat, eastlon, northlat などは、 読みこまれるデータに関するものなので、 elev1km_all.r4l をつかうならば、変えないこと。)

プログラム例の現状では図を画面表示するようにしてあるが、 画像ファイル出力にかえるには、プログラムの終わり付近の plt.show() をコメントにして、 その下に「##」でコメントにしてある4行を生かせばよい。

contourf および カラーバーの説明は、気象データの作図のプログラムを説明するときにする予定。

【[2024-06-18 晩 修正点 1] 2024-06-18 昼の版ではつぎのようになっていました。

toposub = topo[iy0:iy1,ix0:ix1]
lonsub  = lon[ix0:ix1]
latsub  = lat[iy0:iy1]

これでは、contourf にひきわたされる配列は、 ix1番め や iy1番め のひとつ手まえまでの内容になるようです。 ix1番め や iy1番め をふくめるために、つぎのように修正しました。

toposub = topo[iy0:iy1+1,ix0:ix1+1]
lonsub  =  lon[ix0:ix1+1]
latsub  =  lat[iy0:iy1+1] 】

【[2024-06-18 晩 修正点 2] 2024-06-18 昼の版では 標高値が levels のリストの最小値よりも小さいばあいは ax.set_under、 最大値よりも大きいばあいは ax.set_over が有効になることを想定していました。 しかし、contourf のバージョンによっては set_under, set_over で指定された色がつかわれず colors にふくまれた色の範囲が拡大されることがあり、 niigata にインストールされたバージョンもそのようです。 対策として、 levels のリストの最初に非常に小さい値、最後に非常に大きい値を追加し、 colors のリストの最初に set_over で指定した色、 最後に set_under で指定した色を追加することにします。】


修正前のプログラムによる図

topoold.png


修正後のプログラムによる図

toponew.png


2024-06-18, 2024-06-25
増田 耕一 (MASUDA Kooiti)
増田の [B, F, G 合同セミナーのページ] [立正大学用教材目次] [計算機を利用した気象分野の実習教材目次] [教材目次]