FOSS4Gを使って気象庁台風データを可視化した

FOSS4G Advent Calendar 企画FOSS4G Advent Calendar 2012 : ATND、今年も参加。
最近ブログ書いていないからいろいろネタがあるのだけど、具体的なやつがいいかと思いこの前のハッカソンQGISを使った作業内容を忘れないように書いておきます。

12月1日に気象データハッカソンというイベントに参加してきました。
気象データの活用コンテスト、「体調」や「住みやすさ」の可視化サービスなど提案 | 日経 xTECH(クロステック)
気象データハッカソン(2012年12月1日) - Togetter

これにさきだってアイデアソンがfacebook上で行われました。
気象データといえば空間情報であるものがたくさんあるわけで,どんなデータをどう扱えるのかという興味本位で参加してきたわけです。

寒い日曜日の昼過ぎ、場所は夏ごろに開催された復興データベースAPIハッカソンと同じ三菱総研さんの会議室。首相官邸とかすぐ近くのとこです。
主催者あいさつ、自己紹介とかのあとでアイデア提案ある人が発表してチーム分け、チーム作業の後プレゼン、そのあと飲み会というコースでございました。各気象データの使い方についてはグループごとに気象庁の方からいろいろアドバイスありという豪華コース。

満ち引きマップや、体調と気象のマッシュアップやらGeoFuseとかいろいろ面白そうなネタが提案されていました。
OSMの東さんがCrowdmaphttps://crowdmap.com/というUshahidiをクラウドで利用したシステムに気象データとりいれる試みをやろうと提案されていたので、私はそこのチームに参加しました。

Ushahidiでは位置情報を付加したレポートを蓄積、公開することが可能です。蓄積されたレポートはUshahidiに組み込まれているOpenLayersを利用してOSMやGoogleMapsの地図で位置を可視化して閲覧することができます。また、管理者の機能としてKMLで作成した空間データをレイヤとして重ねて表示することができます。東チームでは千代田区が暴風雨に襲われたらというストーリーでデモをすることにしたので、私は気象庁保有の気象データをUshahidiの地図のレイヤとして表示することを当日の目標にしました。

ということでなんらかの位置情報がわかる気象データをKMLにしてUshahidiにアップロードすることが手順になります。
KMLの作成はGDAL/OGRでもできるしQuantumGISにデータをロードできればKMLで保存できます。

気象庁の方に台風の位置データの所在を教えていただきました。
Japan Meteorological Agency | RSMC Tokyo - Typhoon Center | RSMC Best Track Data (Text)
ここに台風の位置をはじめとした諸データがテキストで格納されています。
テキストだというのが重要です。PDFやら地図になっていたらプログラムで読むことができません。


こんな感じのテキストデータとして台風のデータが格納されているわけです。
Japan Meteorological Agency | RSMC Tokyo-Typhoon Center | Format of RSMC Best Track Dataこちらのページにテキストの各項目の意味が書いてあります。行の先頭が 66666 のところが1個の台風データのヘッダ情報で、その後に時刻別の台風の位置や勢力の数値情報が記述されているようです。このデータをQuantumGISWelcome to the QGIS project!に読み込ませることができれば台風位置情報の可視化や情報加工に利用することができます。

テキスト形式で記述されている空間情報データをQuantumGISに読み込む場合はデリミテッドテキストレイヤプラグインを利用します。

この機能を利用すると位置座標の座標値がCSVWKTで記述されたテキストファイルをQuantumGISに取り込むことができます。
その後はQuntumGISの持つ豊富な空間情報を扱う機能で取り込んだデータを使うことができます。

そこで気象庁の台風テキストデータをどうやってQuantumGISのデリミテッドテキストプラグインで使えるようにするかということが課題になります。このデータには複数の台風のデータがヘッダレコードとデータレコードで構成されていて、データレコードのレコード数はヘッダに格納されています。デリミテッドテキストプラグインで読み込みできるのはカラム名を示す単一のヘッダレコードと、そのカラム構成にしたがったデータレコード群で構成されているテキストファイルです。(WKTという形式も読めますが、今回は説明省略)
そういうわけで気象庁台風データはそのままでは読み込むことはできません。とりあえずハッカソンでは1つの台風についてのデータを気象庁データから取り出して、それをCSVファイルに変換してQuantumGISに読み込むことにしました。(ヘッダとデータの行を解析してデータをQuantumGIS用に変換するスクリプトを書けば複数の台風データを読み込むこともできると思います)


デリミテッドテキストレイヤプラグインのダイアログは左のとおりです。ファイル名と座標のフィールド名やファイルのデリミタ(値を区切る文字)を指定します。ここで座標値のフィールドを指定します。座標値は緯度経度(実はこれも複数種類があります)や平面直角系とかの投影座標値でもQuantumGISが解釈できる座標値であればなんでもいいのです。しかし、元の座標値をQuantumGISが解釈できない場合は加工が必要です。
気象庁データを見てみると台風の位置座標は緯度経度で記述されています。QuantumGISでは緯度経度の座標を読み込むことは可能です。しかし気象庁データの緯度経度の単位は0.1度単位の整数値で記述されています。デリミテッドテキストプラグインの座標値の緯度経度は度単位の数値で記述して、度以下の値は10進数の小数値で記述する必要があります。
このような加工を手っ取り早くやるにはMSExcelとかが便利なのでとりあえず気象庁で公開されているテキストデータから1個の台風のデータレコードの分だけをコピーしてきてExcelにペーストしてみます。

ペーストしたデータの区切り位置(空白区切りでも固定長でも大丈夫だと思います)を指定してデータをカラムで区切ると左のような状態になります。ここで座標値の単位を度に変えるには座標値を10.0で割って小数点以下の数値もCSVファイルに保存すればいいはずです。またデリミテッドテキストプラグインでテキストファイルを読み込む場合は先頭の行にカラム名が格納されている必要があるので、ここでカラム名を指定します。



Excel上でこのような状態にした上でデータをCSVファイルとして保存します。
ここではファイルを c:\tokyo\taifu.csv というファイルで保存しました。


CSVファイルの内容は以下のとおりです。

日時,ido,keido,kyoudo,緯度,経度
11092012,303,1336,940,30.3,133.6
11092015,309,1341,940,30.9,134.1
11092018,317,1347,940,31.7,134.7
11092021,324,1353,940,32.4,135.3
11092100,330,1359,950,33,135.9
11092103,339,1369,950,33.9,136.9
11092105,347,1376,950,34.7,137.6
11092106,349,1378,955,34.9,137.8
11092109,359,1392,970,35.9,139.2
11092112,371,1407,975,37.1,140.7
11092115,387,1424,975,38.7,142.4
11092118,405,1436,975,40.5,143.6

このファイルをデリミテッドテキストプラグインで読み込めばQuantumGISで利用できます。ただし数値データの形式を指定しないと数値データもテキストデータとして読み込まれてしまいます。データ形式を指定したい場合は次のページHow to Specify Data Types of CSV Columns for Use in QGIS | Free and Open Source GIS Ramblingsを参考に *.csvtというファイル(今回の場合だとc:\tokyo\taifu.csvt)に各カラムのデータ型を記述してからデリミテッドテキストレイヤプラグインcsvファイルを読んで下さい.
今回のcsvtファイルの記述例.

"String","Integer","Integer","Integer","Real","Real"

このCSVファイルをデリミテッドテキストプラグインで読んでください。

デリミタをカンマにしてX座標を経度、Y座標を緯度に指定。レイヤ名は台風にしてみました。

変換を始めようとすると上記のダイアログが表示されます。ここでは指定テキストに記述されている座標値がどういう座標系の座標値であるかを指定します。

座標系や測地系の話は本稿では省略しますがQuantumGISではEPSGコードというコード番号で座標系(空間参照システム)を管理していますhttp://www.geopacific.org/opensourcegis/573074065ea76a197cfb
今回はWGS84の緯度経度(EPSGコード4326)というやつを使います。(これは最近のGPS等で利用されることが多い緯度経度の座標系です)


デリミテッドテキストレイヤプラグインCSVファイルを正しく読み込むとQuantumGISで台風の位置を示す点が表示されます。

この時点でQuantumGIS上で気象庁台風データを利用することが可能になりました。データカラムに格納されている値を利用していろいろな地図表現や空間解析を行うことができます。しかし今回の目的はこのデータをQuantumGIS上で利用することではなく、台風データをCrowdmap上で利用できるように加工することが目的です。ここではQuantumGISに取り込んだ台風データをKMLファイルに書き出ししてCrowdmapのレイヤとして登録する作業が必要になります。

KMLへの台風データの書き出しはレイヤリストで台風レイヤを選択した状態でマウス右ボタンメニューで表示される「名前をつけて保存」で可能です。

ここで気をつけなければいけないのはCRSという項目です。CRSってのはCoordinate refrence system の略で前に出てきた座標系のことです。(QGISではこの単語の日本語翻訳が統一されていませんね(汗;)
ここでは相手のシステムで利用するために適している座標系を選択する必要があります。そこでCrowdmapではどういう座標系が使われているかを知らなければいけません。CrowdMapの地図システムはOpenStreetMapやGoogleMapを使っています。OpenStreetMapのデータは緯度経度で格納されていて、実際のシステムで利用する場合はそのデータをプログラムで投影変換して利用することが可能です。ただ、今回はOSMで配信している地図サービスをCrowdmapで利用しているわけで、その座標系に合わせる必要があります。そしてOSMの地図とGoogleMapsを切り替えても同じ場所が表示されるので、GoogleMapsと同じ座標系であると思われます。EPSG:3857 - OpenStreetMap WikiGoogleMapsと最近のOSMはEPSG:3857 Spherical Mercator projection coordinate system という空間参照システムを利用しているので,ここのCRSはEPSG:3857を指定します。その上でファイル名をつけてKMLファイルを保存します。


あとはこのKMLファイルをCrowdmapのレイヤとして登録するだけです。
その方法については以下のスライドの23ページにある画面で可能です。
http://www.slideshare.net/AnahiAyala/ushahidi-and-crowdmap-training

Ushahidiの管理権限あるユーザで管理画面にはいってLayerの追加でKMLファイルをアップロード、レイヤ名と色指定するという手順です。

(レイヤ編集 KMLアップロード画面)

最終的にCrowdmapに気象庁台風データをプロットした結果が以下の画面です。


KMLのnameタグとかをオリジナルからちょっといじっています)


KMLにもうちょっと工夫がほしいとこだとか、出てくる情報が少ないとかサイトとしてはいまいちなんですが、とりあえず気象庁のデータを取得して加工して表示するところまでの手順の1つを体験できたことが大きな経験です。そのような作業を行う時のFOSS4Gツールの便利さと、まだほしい機能(KMLをいろいろ表現豊かにできるといいなあ)とかがちょいと見えました。

ハッカソン終わって時間がたってから気が付きましたが、実際に気象庁のデータを可視化することができたのはうちのチームだけだったと思います。結果として私はアイデアを出さないで手だけを動かしていたようです。ハッカソンはアイデア出す人、コーディングする人、デザインする人、テストする人とかいろいろな人のコラボレーションができるチームができると面白いです。そのような場所でFOSS4Gツールが利用される機会が増えるでしょう。来年もいろいろやらないといけないようです。