ページ

2009年6月3日水曜日

流域

またまたデータができあがった!!
今度は日本の地域を流域別に区分したラスターデータ!

これは国土数値情報の統一フォーマットのデータを整形しただけのもの...

でもこれがなかなかやっかいもので,数日かけてようやく整形が終わった!

データファイルには,1行に3次メッシュをさらに100mごとに細分した解像度で
流域のID番号が記載されている。

ようはこれをいつものようにGRASSにインポート可能なラスターデータ(アス
キー形式)
に変換すればいいだけ。

だけど整形するためのアルゴリズムがちょっとめんどくさい。
流れをまとめるとこうだ...

1.まず各行(3次メッシュ)を10×10の行列に整形する
2.この行列をファイルに書き込み,ファイル名を3次メッシュコードとする
3.できあがった3次メッシュファイルから同じ2次メッシュに属するファイルを
集めて,100×100の行列を作る
4.このとき海の上かなんかで,もとのファイル(国土数値情報の統一フォー
マット)にデータのない領域については,別途作成しておいた10×10のゼロ行列
をコピーして穴を埋める(コピーしたゼロ行列を3次メッシュコード名で保存する)
5.できあがった100×100の行列をファイルに書き込み,ファイル名を2次メッ
シュコードで保存する。
6.最後に,できあがった2次メッシュファイルから同じ1次メッシュに属する
ファイルを集めて800×800の行列を作成する
8.3次メッシュファイルを結合したときと同じように,2次メッシュデータのな
い領域については,別途作っておいた100×100のゼロ行列で埋める
9.最後にヘッダ部分にデータの範囲(北端,南端,西端,東端,行数,列数,
ヌルデータの値)
を計算して記入する(例えばこんな感じ
10.GRASSに読み込めば完成!!

何とも伝わりにくい表現ですみません...

要はデータから3次メッシュの行列を作成・結合して2次メッシュの行列を作り,
さらにこれを結合して1次メッシュのデータ行列を作るということ!

でもこれには大きな穴があってさらに一工夫をする必要があった。
それは,一つのフォルダに格納できるデータファイルの数である。
どうやら一つのフォルダには6000だか60000だか(詳しいことはもう忘れてし
まった)しかファイルを格納することができないらしく,3次メッシュのデータ
行列を作ろうと思うと全部保存することができない。
ということで,作ったそばから消していくことが必要になる。
これは2次メッシュのデータ行列を作成したところでやらないといけない。

というわけでデータを整形するときに,まず同じ2次メッシュに属する3次メッ
シュファイルを作成して,2次メッシュの行列を作成してから,次の2次メッシュ
コードに移る。という作業になる。

なんだかごちゃごちゃいってても訳が分からんので,詳しくはスクリプト(bash)を読んでください。

3つのスクリプトがありますが,方法は3つをダウンロードして実行権限を与え,mesh1.shを実行するだけです。

この流れで整形することで,一応目的の流域のラスターデータを作ることができ
ます。

余談ながら,このスクリプトを走らせるとCPUの50%ぐらいを使って,作業が終わ
るまでに約6日間かかるそうな...
ああ恐ろし...

なので私は2次メッシュ行列を作るところまでの作業を3つのスクリプトで並列
して行い,CPUを100%稼働させて約4日ぐらいで終わりました。

めでたしめでたし!!

あとは1次メッシュを結合させて日本全国の流域データを作るとしよう!

0 件のコメント: