今度は日本の地域を流域別に区分したラスターデータ!
これは国土数値情報の統一フォーマットのデータを整形しただけのもの...
でもこれがなかなかやっかいもので,数日かけてようやく整形が終わった!
データファイルには,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 件のコメント:
コメントを投稿