2016年12月19日月曜日

QGIS processing でのRアルゴリズムの自作例 (気象庁の気象観測データのGISへのインポート)

この記事はFOSS4G Advent Calendar 2016 の18日目の記事として書きました。

色んな場所のQGISハンズオンにて、QGIS processing機能による他のソフトウェアとの連携処理 (R言語とかGRASS GISとか)のお話を最近ちょこちょこしています。

Slideshareに資料をあげているものだと


※他にもちょこちょこ


Rの初期設定やRSXファイルとは何かについてはSliedshareを参照していただくとして、ここでは気象庁で公開されている気象観測データをGISに読み込むRアルゴリズムを作ってみたので、RSXの自作の仕方の例として順を追って紹介していきます。


使用データ(気象庁の気象観測データ)について

過去の気象データ検索から日本全国の気象台・アメダス、日時を指定することで該当の気象観測データのページが表示されます。(例. 銚子の2016/12/18の1時間ごとのデータ

似たような過去の気象データ・ダウンロードとは異なり、URLに規則性があったり、10分毎の観測値があったりとプログラミング上、使い勝手が良いので今回は過去の気象データ検索を使っています。


まずは普通にRスクリプトの作成


ざっくりとした処理の流れは、
  1. Webページのテーブル情報の読み取り
  2. 予め調べておいた観測所ごとの緯度経度の紐付け
  3. SpatialPointsDataFrameクラスに変換
  4. GISデータとして出力
となります。Step2の観測所ごとの緯度経度を調べたり、Webページのテーブルの列数が気象台とアメダス(アメダス内でも観測項目の数はいろいろ)で異なり、場合分け処理の記述がめんどいので、今回は関東地方の気象台のみの観測データに対応させてあります。





RSXファイル独自の記述

(詳細はQGIS Training Manual 17.31, 17.32 を参照)


Rスクリプトの冒頭に以下の記述をしています。
スクリプトでは指定した年月日時の観測値を読み取りGISdataに変換しているので、年月日時を入力するように設定しています。

year の2016は初期入力値で変更可能です。
month,day,hour は以下のような記述でドロップボックスから選択するようにすることができます。

##Data downloading=group
##year=number 2016
##month=selection;1;2;3;4;5;6;7;8;9;10;11;12
##day=selection;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31
##hour=selection;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24
##Output=output vector


また、スクリプトの最後ではWriteOGR関数によるGISデータの出力はせずに、以下のように冒頭で指定したOutputという名前の変数(SpatialPointsDataFrameクラス)を作成して終わっています。

Output <- SpatialPointsDataFrame(sp,data=sp.dfm)


出力結果

出力されるポイントデータは属性情報として、気象庁の観測データの各項目が入っています(気温、降水量、気圧や風速、風向など)。
※風向は北を0とした時計回りの角度に変換してます。

以下の図はOpenStreetMapの背景図に気温分布のラスターデータと観測地点のシンボルを矢印に変えて風向の値に応じて回転させたものが載せてあります。



とまあRでやっている処理をQGISでGUIで操作できるようにできるというのがprocessingのメリットです。

ぶっちゃけRのプログラミングができる人はそちらで完結したほうが楽なのですが…。同じ処理をプログラミングのできない人とも共有できるのがpurocessingのメリットかなと思います。






0 件のコメント:

コメントを投稿