レイヤのインポートと座標変換



今回はアメダスのデータをGRASSに登録し、
座標変換を行い以前作成したデータと重ね合わせます。

データ準備

eosmaiに入りアメダスのデータのディレクトリに入る
  • cd /DATA/
  • cd Meteo
  • cd normal_amedas

ルビーファイル get_amedas_normal.rbについて
これはアメダスのデータをgrassで読み込めるようファイル変換するスクリプトである

ルビースクリプト説明

64行目から72行目をいじることで他のデータに変換・利用が出来る
69がメイン

3行目でデータの保管している位置を指定
6行目でデータの対象範囲を指定している(単位はdegree)
9行目は温度のidを表している。このidを変えることで他のデータを引き出すことが出来る

21行目から24行目でデータを読み込みます
26行目から欲しい領域を選択します

31行目で配列を初期化します
32行目からデータを取ります
33行目で列単位で記載されているデータを分割します。まず、要らない部分を削り、
34行目緯度の度に相当します、
35行目が分に相当します
36行目が標高になります
38行目v[0]は53+3桁の数字の三重県の地図データの場所をさします,v[3]の場所は名前をさします
gsubで空白を削除します。capitalizeで取得した英語の地域名の最初の文字だけ大文字にします

46行目でid番号ごとにデータをいれる
49行目でファイルを呼び出している
53行目 9文字目から4文字分をとって調べる
55行目 12月分の月別データ+年平均を取る
56行目 RMKが8だったら正常、0なら×

67行目 正常値か確認
69行目 データを書き出す

アメダスデータの中身

アメダスのデータを見てみます
  • less amedasu_station_index.csv
日本語が文字化けしています
qボタンを押して中止してください
次はこのように打ちます
  • less amedasu_station_index.csv | nkf -w
nkfはアプリ名です
これで動かすと、文字が流れてしまいます
そこで、命令の順番を変えてみましょう
  • nkf -w amedasu_station_index.csv | less
こうすると文字の流れを止める事が出来ます
  • wc amedasu_station_index.csv
文字化けはしていますが最後の行で1600と出ています
1行目はヘッダですから1ひいて、1599行がデータという事が分かります

  • cd monthry
  • cd area53
lessで中を見てみましょう
  • less nml_amd_m_53016.csv

ルビーファイルの起動

まずアメダスのディレクトリを作成し、中に先生のディレクトリからルビースクリプトをコピーします
  • cd ~/Workshop
  • mkdir AMeDAS
  • cd AMeDAS
  • cp /home/kaoru/Workshop/AMeDAS/get_amedas_normal.rb .
lsで内容を確認してみましょう
次に、ルビースクリプトを起動してみましょう
  • ruby get_amedas_normal.rb
temp_normalというデータが作られますので中を見てみましょう
  • less temp_normal
データがきれいに並べられているのが分かります

grassによるインポート

grassのコマンドを調べましょう
http://grass.itc.it/grass62/manuals/html62_user/vector.html
v.in.asciiの項目を調べます
exampleを確認しますと、example5が今回作成した形に近い事が分かります
temp_normalがある所からgrassを起動します
  • cd /Workshop/AMeDAS/
  • grass62
まずリージョンを確認し、デフォルトに戻しましょう
  • g.region -p
  • g.region -d
  • g.region -p

モニタを立ち上げます
  • d.mon x0

データを眺めましょう
  • cat temp_normal

データをインポートします
  • cat temp_normal | v.in.ascii -z z=3 cat=0 out=temp_normal col='lon double,lat double,temp double,station_id integer,station_name varchar(20)'
cat=0はカタログ番号を0から入れる
colには経度,緯度,温度,id,などいれる。''で内容をくくる。要素 文字の形式,で一セット
エラーが出ず、node=28とでてたらオッケー
ちゃんと作成されたか確認
  • g.list vect
表示してみる
  • d.vect temp_normal
xが表示されているだけです

このデータは座標系が異なる(日本測地系)のため、座標が少しずれています。
座標を変換しましょう
まずgrassを終了しましょう
  • exit
また、grassを立ち上げます
  • grass62

新しいロケーションを作成します
右下のボタンを押します
LOCATIONに次のように入れます
Mie_japan
無いから作るときかれますので
enter
座標を聞かれるのでlong-latitudeを選びます
B
enter
メモを聞かれるので適当に入れましょう
(例)Mie japan
これでいいかときかれます
y
なんか聞いてきます
y
座標系一覧が確認できますので行いましょう
list
tokyoが日本測地系なのでそれを選びます
tokyo enter
詳細を聞かれますのでリストを確認しましょう
list enter
tokyoを選びます
1 enter
座標を入れます
北-35:20N
西-135:45E 
東-137E
南-33:40N
間隔は以下の通り
0:0:02.25
0:0:01.5

※失敗した場合(作業の際は要注意)
rm -r ~/GRASS/Mie_japan

ディスプレー立上げ
  • d.mon x0
データのインポート
  • cat temp_noemal | v.in.ascii -z z=3 cat=0 out=temp_normal_j col='lon double,lat double,temp double,station_id integer,station_name varchar(20)'
データの確認
  • g.list vect
データの表示
  • d.vect temp_normal_j
grassを閉じます
  • exit

レイヤを日本測地系から世界測地系に変換します(v.projの利用)
grassを立ち上げます
  • grass62
project locationをMieで選択します
あと、その右は名前を選択します

モニタを立ち上げます
  • d.mon x0
レイヤを確認します
  • g.list vect
レイヤを表示します
  • d.vect temp_normal

コマンドの内容を確認します
  • v.proj help
変換を行います
  • v.proj in=temp_normal_j lo=Mie_japan out=tmp_normal_w

新しいレイヤを表示して比較してみましょう
  • d.vect temp_normal_w col=red
※d.zoomを利用して見てみましょう

空間内装をします
現在のデータ間隔が50mメッシュなので大きすぎるため、リージョンを変更します
  • g.region ns=0:0:30 ew=0:0:45
内容を確認しましょう
  • g.region -p
先回作成したマスクを削除します
  • g.remove rast=MASK
次に、v.surf.rstコマンドの確認をします
  • v.surf.rst help
実際に入力してみましょう
  • v.surf.rst in=temp_normal_w elev=temp1 layer=0
ラスタデータが出来上がりますので確認しましょう
  • g.list rast
念のために画面をリフレッシュさせます
  • d.erase
ラスタを表示してみましょう
  • d.rast temp1
先ほどのベクタも表示してみましょう
  • d.vect temp_normal_w
ラスタの中身を確認してみましょう
  • d.whatrast

以上です

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2008年07月22日 12:23