はじめての気象データ処理

このブログでは、気象を学ぶ方でも超初心者を対象として気象データ解析のための基礎基本を解説します。主にFORTRAN、Python、GMT、GrADSのTipsをご紹介します。

バイナリファイルをテキストファイルに変換したい!fortranでやってみよう。

みなさん、こんにちは。チャリおじさんです。

今回は、バイナリファイルをテキストファイルに変換するfortranプログラムをご紹介します。

レーダーエコーとかMSMとかJRAとか、多くの気象データはバイナリファイルで提供されています。

それを統計処理するには、このテキストファイルに変換する操作が必須です。

ここでは例として、「気象庁が公開している全国合成レーダーGPVのバイナリデータを、fortranでテキストファイルに書き出すプログラム」をご紹介したいと思います。

バイナリデータについて

レーダーエコー値が記録されている、拡張子が.binになっているファイルのことです。

このバイナリファイル、普通にviとかエディタで開いても、中身を見ることができません。

なので統計解析したいときは、バイナリファイルそのままでは計算できないのです。

よってこのバイナリファイルをfortranを使って、中身が読めるようにテキストファイルに書き出します。

バイナリファイルの構成と変換

バイナリファイルは、010101...のように0と1の羅列がずっと並んでいて、2進法で書かれています。

途中に特に区切りや改行はなく、0と1が永遠に続きます。

これを計算できるようにするためには、10進法に変換する必要があります。

2進法と10進法の関係として、「2進法の32桁で10進法の1つの値を表す」というのがあります。(これについて詳しくは他のサイトを参照してください。)

なので、0と1の羅列を32桁ごとに区切って読めば、2進数を10進数に変換することができます。

2進法の1桁は1bitです。なので32桁は32bitです。さらに8bit=1byteです。なので32桁は4byteになります。

よってfortranのプログラムでは、変数定義の際に、「これは4byteの変数ですよ」と宣言してあげれば、2進法のデータが10進法に変換されて入力されます。

全国合成レーダーGPVとは

要は雨雲レーダーのことです。

気象庁が提供するデータですが、こちらのサイト(京都大学)で無料で取得することができます。

バイナリファイルの中にはレーダーエコー値(dbZ)が羅列されています。

プログラムの中で、緯度経度を計算して、「緯度 経度 値」のように出力できれば、今後の統計解析で役立つでしょう。

プログラム

オレンジ色は入力するデータに合わせて値を入力する箇所です。適宜変更してください。

青色の箇所について、プログラムの下に説明をまとめています。

ーーー

program
implicit none

integer, parameter :: x=(経度グリッド数), y=(緯度グリッド数) !(1)
integer :: i, j
real :: lat, lon
real(kind=4), dimension(x,y) :: figure !(2)

open(unit=11,file='infile.bin',form='unformatted',access='direct',status='old',recl=x*y*4) !(3)
open(unit=31,file='outfile.txt',status='replace') !(4)

read(unit=11,rec=1) figure

do j = 1, y
lat = (南端の緯度) + (緯度間隔)*(j-1) !(5)
do i = 1, x
lon = (西端の経度) + (経度間隔)*(i-1) !(5)
write(31,'(f11.6,f11.6,f10.4)') lat, lon, figure(i,j) !(6)
end do
end do

end program

ーーー

以上です。

ポイント

(1)x,yは定数です。縦横のグリッド数を入力してください。

(2)kindは種別値といって、byte数を指定するものです。

(3)バイナリファイルは「書式なしファイル」なので、「form='unformatted'」を指定します。
access='direct',recl=x*y*4」によって、レコード長が4byteに固定されます。

(4)出力ファイルは通常通りopenします。別に10進数とか宣言しません。

(5)レーダーエコー値を緯度と経度と並べて出力します。バイナリデータには緯度経度の情報は入っていないので、自分で入力する必要があります。

(6)ほしいレーダーエコー値の桁数に合わせて、編集記述子(f11.6とか)を変更してください。

 

最後に

いかがでしたか?

これできっと、「緯度 経度 レーダーエコー値」という値が羅列したテキストファイルが出力されたでしょう。

それではまた次回、チャリおじさんでした。