気象データを解く〜データをパソコンで解析する その3

  • 2013.06.03 Monday
  • 12:52

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

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



前回からずいぶんと開いてしまいましたが、パソコンで解析するの続きで、
せっかくパソコンで気象データを解き終わったら、できればモニタにそれを表示させたい。

表示させるというと、気象データの場合は等圧線や等高度線、等温線など、いわゆるコンター図を想像すると思うが、

いきなりコンター図を書くというのは早すぎるので(※)、
ここでは、まずちゃんとデータが正しく読み取れているのかを表示させてみる、
つまりデータを視覚化させてみることに着目する。

※コンターが描けるプログラムを作るためには、それなりにプログラミングを学習しておく必要があるのと、
コンターのロジック自体が難易度が高いかなとか思っている。


前回に引き続いてVisualBasic2008を利用していく。
(VBの使い方は本屋やネットで調べてください)

関連投稿
気象データを解く〜データを入手する
気象データを解く〜データを開く、前に用語とか整理
気象データを解く〜データを開く まずは基本的な第0節から
気象データを解く〜データを開く 第1節を読む
気象データを解く〜データを開く 第3節を読む
気象データを解く〜データを開く 第4節を読む
気象データを解く〜データを開く 第5節を読む
気象データを解く〜データを開く 第7節を読む
気象データを解く〜データを開く 続くデータを見ていく
気象データを解く〜データを開く surfファイルを読む

気象データを解く〜データをパソコンで解析する その1
気象データを解く〜データをパソコンで解析する その2
気象データを解く〜データをパソコンで解析する その4
気象データを解く〜データをパソコンで解析する その5


単位変換や気象計算覚え書き
単位変換覚え書き〜風向風速




まず、VBのフォームアプリケーションを新規作成して、そこにピクチャーボックスを作る。

MSMプロット


前回抽出したデータはMSMでpallデータなので、241x253=60973点の格子

ということで、ピクチャーボックスのサイズは241pixel x 253pixel、
つまり、1格子点を1 x 1pixelに表示してみることにする。

※surfの場合は、倍の481 x 505であるので、pallデータを入力した場合、
2 x 2 pixelに書き込むようにロジックを組めばよい。


続いてプログラムしていくのだが、ここで、いくつか定義をしておく。

まず、色つけを単純化させるために単色(透明度の濃淡)で表現することに特化する。
そのため、今回利用するデータはpackageされたまま(第7節の12bit毎のデータ)を使っていくことにする(※)。


※実際には vOrg を求めて描画していくのだが、これはコンターマップを描画する場合に考えていく
 なぜなら、packageは12ビット、数値でいうなら0〜4095(000〜FFF)なので、
 10(16)で割れば、0〜255となる。
 XX〜YYはこの色で塗るといった難しいロジック(区間を決めて)を組まなくても、単純な計算で色つけができるからである。

 ただし、vOrgを求めないことから(常に第5節の参照値Rは変化しているので、同じ0〜4095でも参照値によって異なる)、
データ毎にできあがる濃淡図の区間が異なってしまうことに注意したい。

 もし、区間を設定して描画される場合は、この記事は参考にできないと思うので、参考程度に読んでもらえればと思う。


ここまで条件を書いてきたので、ザックリとこんな感じのソースを書いて、ピクチャーボックスへ早速データを描画してみる。

Dim intW As Int32 = Me.PictureBox1.Width
Dim intH As Int32 = Me.PictureBox1.Height

Dim intX As Int32
Dim intY As Int32
Dim intP As Int32

Dim valU As Int32
Dim clrA As Int32

Dim clrM As Color
Dim bImg As Bitmap = New Bitmap(intW, intH)

For intY = 0I To intH - 1I
    For intX = 0I To intW - 1I

        intP = intW * intY + intX 'データの位置(切り出す位置)

        valU = GetPackedData(intP) '第7節のデータを指定位置から切り出す関数

        clrA = valU ¥ 16I '12bitを8bit変換

        clrM = Color.FromArgb(clrA, 255I, 128I, 0I) '透明色でデータを表現

        Call bImg.SetPixel(intX, intY, clrM) 'ビットマップに色を着色

    Next intX
Next intY

Me.PictureBox1.Image = bImg
bImg = Nothing

※GetPackedData部分(第7節データの取り出し方)は前回の記事を見ながら自分で解いてください。

地図データは地図データの取得方法を参考にしながら取得して描画してください。
各格子点の緯度経度が分かるので、プロット位置を計算していけば書けると思います。


サンプルに使ったMSMデータの850hPa気温データ(2012/06/27 09:00JST)を表示した例

MSMプロット



関連投稿
気象データを解く〜データを入手する
気象データを解く〜データを開く、前に用語とか整理
気象データを解く〜データを開く まずは基本的な第0節から
気象データを解く〜データを開く 第1節を読む
気象データを解く〜データを開く 第3節を読む
気象データを解く〜データを開く 第4節を読む
気象データを解く〜データを開く 第5節を読む
気象データを解く〜データを開く 第7節を読む
気象データを解く〜データを開く 続くデータを見ていく
気象データを解く〜データを開く surfファイルを読む

気象データを解く〜データをパソコンで解析する その1
気象データを解く〜データをパソコンで解析する その2
気象データを解く〜データをパソコンで解析する その4
気象データを解く〜データをパソコンで解析する その5


世界地図のダウンロード〜その1 Desktop Coastline Extractorをダウンロードする

単位変換や気象計算覚え書き
単位変換覚え書き〜風向風速

コメント
コメントする








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

calendar

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< September 2018 >>

search this site.

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

categories

アマゾン

楽天

selected entries

archives

recent comment

recent trackback

profile


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

others

mobile

qrcode

powered

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