気象データを解く〜データを開く surfファイルを読む

  • 2012.08.07 Tuesday
  • 12:53

 気象データを解析しようと思うが、
どこから入手すればいいのか、どうやって解析すればいいのかについて覚え書き

できるだけ多くの気象に興味のある人(特にこれから研究しようとしている学生さん)に、
気象の知識だけでなく、コンピュータで気象解析ができるようになってくれればと思っています。


時間が空いてしまったが、もう一つある
Z__C_RJTD_20120627000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin
を見ていくことにする。


GRIBを開く

ぱっと見ただけでは同じように見えるのだが・・・。


続きを読む >>


関連投稿
気象データを解く〜データを入手する
気象データを解く〜データを開く、前に用語とか整理
気象データを解く〜データを開く まずは基本的な第0節から
気象データを解く〜データを開く 第1節を読む
気象データを解く〜データを開く 第3節を読む
気象データを解く〜データを開く 第4節を読む
気象データを解く〜データを開く 第5節を読む
気象データを解く〜データを開く 第7節を読む
気象データを解く〜データを開く 続くデータを見ていく
気象データを解く〜データをパソコンで解析する その1
気象データを解く〜データをパソコンで解析する その2
気象データを解く〜データをパソコンで解析する その3

 


同じように解読していくが、長くなってしまうので、
違うところだけをピックアップしていくことにする。

特に大きく変化しているのは第4節のみのようだ。


第4節の10、11オクテット、つまりデータの種類を抜き出すと

3 Mass、1 Pressure reduced to MSL(mean sea level) → 海面更正気圧
3 Mass、0 Pressure → 気圧
2 Momentum、2 u-component of wind → 風の東西成分
2 Momentum、3 v-component of wind → 風の南北成分
0 Temperature、0 Temperature → 気温
1 Moisture、1 Relative humidity → 湿度
6 Cloud、3 Low cloud cover → 低層の雲量
6 Cloud、4 Medium cloud cover → 中層の雲量
6 Cloud、5 High cloud cover → 上層の雲量
6 Cloud、1 Total cloud cover → 全雲量
1 Moisture、8 Total precipitation → 積算降水量(※)

※積算値なので、初期時=0には入っていないようだ。

が入っているようだ。

 

余談

低層、中層、上層の雲ってどの高さか?ということで、調べてみた。

 

高さにすると、低層:地面付近〜2km、中層:2〜7km、上層:5〜13km

hPaにすると、低層:850hPaから下、中層:700〜600hPa、上層:500hPaから上

だそうだ。

 

雲の種類(下関地方気象台)

天気予報や解説では用いないことから削除した用語



次に23オクテット目は65(101)で
テーブル4.5よりMean sea level つまり海面(WMOで指定された平均海面のようです)

※24オクテット以降がFFなので、23オクテットだけで判読するようだ。

続くデータには、
1 Ground or water surface
103 Specified height level above ground

などが入っている。

なお、103の場合は、24オクテット目に0か1が入るようで、
さらに続く25オクテット〜のデータが10か15が入っている。
103は単位がmのようなので、24オクテット目が0の場合は10m、
1の場合は、気圧面の考えから1.5m x 101 = 15と導けるので、1.5mと考えられる。



さて、21番目のデータを読み取ろうとすると、
これまで出てこなかったテンプレート4.8という番号が出てくることがある。

テンプレート4.8というのは、
average, accumulation and/or extreme values or other
statistically processed values at a horizontal level or in a
horizontal layer in a continuous or non-continuous time interval
つまり、何かの統計であるらしい。

そのテンプレート4.8のカテゴリーは上にも書いた積算降水量データのときに現れるようで、
また、テンプレート4.8には4.0にはなかった35オクテット以降が存在するようだ。

既にお気付きかもしれないが、第4節はいつもなら34オクテットなのだが、
は3A(58)で58オクテットの長さであることも、それを示している。


では、新しく出てきたテンプレート4.8の35オクテット以降を見ていくと、

35〜41オクテットは時刻が入っているようで、計算すると
2012/6/27 1:00:00 となる

42オクテット目は1である。
直訳すると統計を計算するために使用した時間間隔の記述の仕様の数ということであるが、ちょっとよく分からない。

43〜46オクテット目も0である。
統計処理の欠測数らしい。0ならばないと言うことで無視できる。

47オクテット目は1でテーブル4.10から
1 Accumulationで、積算である。降水量データが積算であることがここで改めて定義される。

48オクテット目は2でテーブル4.11から
予想時間は増加して、同じ開始時間を持つとか書いてあるが、要するに時間が増加していくと言うことにしておく。

49オクテット目は1でテーブル4.4から時間、つまり、48オクテットの増分は時間単位を意味する。

50〜53オクテット目は1であり、
単位は49の単位ということで、統計処理した時間は1時間ということらしい。

54オクテット目は1でテーブル4.4からこれも単位が時間を示していることになる。

55〜58オクテット目は0で、単位は54オクテット目を使うので、
0時間である。
直訳するなら、連続的なフィールドの時間増加分らしい。


42オクテット目以降が何を言っているのか分からないが、
期間の終了(35〜41オクテット)が示す時刻までの積算値であることだけは確かである。
また、統計処理した時間を示す50〜53オクテット目から、前1時間(※)と推測される。

※なぜかと言うと、期間の終了が2012/6/27 1:00:00なので、それよりも前を統計していると考えられる。
 また、初期時刻には降水データがないことなどから(前積算できないためであろう)、後1時間ではないと考えられる。


積算降水のみがテンプレートが異なるので、解読がややこしいが、surfデータはこれで解読できる。

これでMSMデータのすべてを解読できた。

が、MSMだと短期間であるので、是非ともGSMも解読して欲しいと声が聞こえてきそうだが、
ざっと見る限りでは全く一緒である。

ただ、降水量はどうやら初期時からの積算らしく(上の50〜53オクテットが 初期時刻と予想時刻の差分に一致する)、
もし、時間降水を求めたい場合は、

求める時間のデータ − 前の時間のデータ = Result

と計算する必要があるようだ。
※差分するとしばしば負数となる場合があるが、
おそらく、第5節のパッキングが異なることで生じるのだろうと思われる。

基本的にパッキングは最大値と最小値の差分を4096(212)分割したものを
第7節に保存されている(パッキング値)と推測される。

 4096分割した値 = (最大値 - 最小値) / 4096
 元の値 = 最小値 + 4096分割した値 x パッキング値

その際、元の値の小数点などが丸められて本来の値より若干ずれてしまう。
そうしたズレ分が差分したときに負数として現れていると考えられる。



CWMも基本的に同じ形式である。
(ちょっと勘違いしていたのですが、第6節が発生するのは、どうやら解析データというもので、地球流体電脳倶楽部では予測データしかおいていないので、MSMやGSMと同様に取得できるようだ)

形式が異なるという点では、7777の後にGRIBと入ってくる箇所が存在する。
つまり、データが2つパッキングされているという点です。

また、取得したカテゴリを読むとGRIBの仕様では判断がつかない(気象庁独自?)ので、
技術情報245号は入手した方がよさそうだ(下記)。


CWMから抜き出したカテゴリを単純に解読すると

0,3 Temperature Pseudo-adiabatic potential temperature K or equivalent potential temperature
0,10 Temperature Latent heat net flux
0,11 Temperature Sensible heat net flux


であるが、支援センターの配信データを見ると

波高[m]、周期[秒]、波向[度]、
海上風東西成分[m/s]、海上風南北成分[m/s]

と書いてあるので、気温データではなさそうだ。

一応、後半のGRIBデータは風のデータカテゴリに一致するので、海上風データで間違いはなさそうだが、
前半の波っぽいデータは、どれがどのカテゴリに一致するのかは分からない。



加筆121002
もう一度Code table 4.1を読むと、続きに、Product discipline 10という項目があり、
カテゴリ0が Waves となっている。

おそらくこれが波の場合のカテゴリーであると考えられる。
(実は、一番先頭第0節の7オクテット目がこのテーブル4.1の製品分野に当たる)

これに沿って解読していくと

3 Significant height of combined wind waves m
and swell
10 Primary wave direction
11 Primary wave mean period

とある。したがって、それぞれ 3→波高、10→波向、11→周期 と解読できる。
風については、0節7オクテット目は0なので、そのまま風の東西成分となる。



追記140725
気象庁ホームページから仕様書のダウンロードが可能となりました。

技術情報245号

技術情報を読むと、上のカテゴリの解釈であっていることが分かる。



関連投稿
気象データを解く〜データを入手する
気象データを解く〜データを開く、前に用語とか整理
気象データを解く〜データを開く まずは基本的な第0節から
気象データを解く〜データを開く 第1節を読む
気象データを解く〜データを開く 第3節を読む
気象データを解く〜データを開く 第4節を読む
気象データを解く〜データを開く 第5節を読む
気象データを解く〜データを開く 第7節を読む
気象データを解く〜データを開く 続くデータを見ていく
気象データを解く〜データをパソコンで解析する その1
気象データを解く〜データをパソコンで解析する その2
気象データを解く〜データをパソコンで解析する その3
 

コメント
とある学生です。
気象データを解くシリーズの記事、大変面白く読ませていただきました。

この記事でどうしてもわからない箇所があり、質問させていただきます。
記事中で
------------------------------------------

基本的にパッキングは最大値と最小値の差分を4096(212)分割したものを第7節に保存されている(パッキング値)と推測される。

4096分割した値 = (最大値 - 最小値) / 4096
元の値 = 最小値 + 4096分割した値 x パッキング値

------------------------------------------
とありますが、ここで書かれている元の値、パッキング値、最小値とはそれぞれ何を指しているのでしょうか。

なんとなく、解放式

Y = (R+X*2^E)/10^D

におけるR,E,D,X,Yのいずれかを指しているような気がするのですが…

ご返信いただければ幸いです。
  • gonbee213
  • 2014/10/17 9:54 AM
gonbee213さま
コメントありがとうございます。

GRIBの解き方をおおざっぱに書いているため、
分かりにくい点が多々あると思いますが、読んでいただきありがとうございます。

さて、質問の件ですが、コメントいただいたように、Y=の解法式を日本語に直訳した形となります。

それぞれ

元の値 = Y
最小値 = R
4096分割した値 = X
パッキング値 = 2^E

具体的に、第5節/7節の解説に当てはめると、
http://blog.syo-ko.com/?eid=1431
http://blog.syo-ko.com/?eid=1438

元の値 = Y = 取り出す値
最小値 = R = 52.38658905
4096分割した値 = X = X2 = 7節の12bit値
パッキング値 = 2^E = 2^-5 (0.03125)

となります。

なお、D(十進尺度)はだいたい0が入るので、10^0 = 1 で省略しています。
仮にDに0以外が入る場合は、10^D が日本語式に必要になり、

元の値 = (最小値 + 4096分割した値 x パッキング値) / 10^十進尺度

となります。


本文にはあえて書いてはいませんが、
この日本語式が理解できると、自分で解析した結果をGRIB形式に圧縮することも可能になります。



ちなみに、実際のGRIBを解いてみると、4096分割されていないものがほとんどで、
なるべく誤差の少ない値(少なくする値)で分割しているように感じております。

  • rockecco
  • 2014/10/17 12:35 PM
ロケっこ様へ

素早いお返事ありがとうございます。
解放式のY,X,R,E,Dがそれぞれ対応していたのですね。

Y = (R+X*2^E)/10^D

元の値 = (最小値 + 4096分割した値 x パッキング値) / 10^十進尺度

ご回答いただき大変助かりました。
無事、デコードプログラムが完成しました。
これからも面白い記事を期待しております。
  • gonbee213
  • 2014/10/17 3:46 PM
gonbee213さま

解決できたようで良かったです。

また不明なところがありましたらコメントいただければと思います。
  • rockecco
  • 2014/10/17 4:29 PM
コメントする








    
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
<< December 2018 >>

search this site.

よく使う、検索される投稿

categories

アマゾン

楽天

selected entries

archives

recent comment

  • MacでBlu-ray編 〜 BD-Rを焼く その4 無料のライティングソフトを使ってみる編
    rockecco (12/03)
  • あの、クラスとかメソッドとかプルダウンできるバーって〜Visual Studio 2015
    rockecco (12/03)
  • MacでBlu-ray編 〜 BD-Rを焼く その2
    rockecco (12/03)
  • あの、クラスとかメソッドとかプルダウンできるバーって〜Visual Studio 2015
    やま (11/29)
  • MacでBlu-ray編 〜 BD-Rを焼く その4 無料のライティングソフトを使ってみる編
    ブルーレイ 書き込み (11/20)
  • MacでBlu-ray編 〜 BD-Rを焼く その2
    ブルーレイ 焼く (11/13)
  • プリンセスパフュームのキーがいくつ出るか考えてみる
    Y. U. (11/09)
  • プリンセスパフュームのキーがいくつ出るか考えてみる
    rockecco (11/08)
  • プリンセスパフュームのキーがいくつ出るか考えてみる
    Y. U. (11/08)
  • プリンセスパフュームのキーがいくつ出るか考えてみる
    rockecco (11/08)

recent trackback

profile


※当ブログはリンクフリーですが、 取材や雑誌等で掲載される場合は、事前にお知らせください

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM