今回は前回の続きで複数の2次メッシュを結合させて,それを最終的にpsファイルに変換して描画させます.

1. メッシュの読み込みの続き

エディターを立ち上げて前回のスクリプト(mems2z.rb)の続きに書きます.

先回 5行目が523501と513674になっていましたが、ここでは523601と523674に変更します
region = ["523601","513674"]

dir = "O:/DATA/Japan2/"                          #O:/DATA/Japan2/をdirに代入
all_2nd_mesh.each do |row|                        #all_2nd_meshの配列要素をrowと置く
 201.times do |j|                              #それを201回繰り返すものをjと置く
  row.each do |mesh|                           #rowの配列要素をmeshと置く
   if j == 0                                 #jが0の時
    first_mesh = mesh[0,4]                       #meshデータの頭から4つの数字を取ってきたものをfirst_meshと置く
    file = dir + first_mesh + "/" + mesh + ".MEM"         #fullpathのファイルの指定
    if File.exist?(file)                           #fileが存在するかどうか
     puts file                               #文字列としてfileを表示
    end
   end
  end
 end
end
標高データのあるOドライブのディレクトリを指定することをfullpathといいます.日本語表示の場合pよりもputsのほうがいいです.
これで保存してコマンドプロンプトで実行するとOドライブのデータ場所が表示されます.
O:/DATA/Japan2/5236/523601.MEM
O:/DATA/Japan2/5236/523602.MEM
O:/DATA/Japan2/5236/523603.MEM
O:/DATA/Japan2/5236/523604.MEM
O:/DATA/Japan2/5136/513671.MEM
O:/DATA/Japan2/5136/513672.MEM
O:/DATA/Japan2/5136/513673.MEM
O:/DATA/Japan2/5136/513674.MEM

表示した8個のデータを統合して,1行ずつ横方向にデータを読み込みます.
またファイルを読み書きするためには最初にファイルを開けておく必要があります.コメントアウトが表示されている行が付け加えた箇所です.

out = open("temp.z","w")                    #temp.zを書き出し専用のファイルとして開ける
dir = "O:/DATA/Japan2/"
all_2nd_mesh.each do |row|
 f_mesh = {}                           #連想配列の初期化
 201.times do |j|
  row.each do |mesh|
   if j == 0
    first_mesh = mesh[0,4]
    file = dir + first_mesh + "/" + mesh + ".MEM"
    if File.exist?(file)
     f_mesh[mesh] = open(file); puts file        #fileの読み込み
     f_mesh[mesh].gets                   #1行読みとばす   
    end
   else                             #jが0以外  
    line = f_mesh[mesh].gets                #f_mesh[mesh]から1行読み込んだものをlineへ代入
    200.times do |i|                     #それを200回繰り返すものをiと置く
     z = line[9+i*5,4]                   #lineのデータの頭から(9+i*5)+1番目から4つの数字をとってきたものをzと置く
     out.puts z                       #800×400個のデータの表示
    end                            #end 
   end
  end
 end
 f_mesh.each{|mesh,f| f.close}               #f_meshの配列要素をmeshとし,f_meshを閉じる
end
out.close                             #temp.zを閉じる  
これを保存してコマンドプロンプトでディレクトリを表示する(dir)とtemp.zがあることを確認してください.

またコマンドプロンプトでエラーが出たりディレクトリが存在しないときは,エディターがどこまで正しく作れているのかチェックをしてみましょう.チェックしたい範囲を決めてその下の行に__END__と入力すると,ENDより下の行は読み込まれないようになります.これを利用して,どこにエラーがあるのか調べることができます.

2. GMTで絵を表示させる

できたtemp.zをコマンドプロンプト上で,GMTコマンドなどを使ってpsファイルにしてそれをGSviewを用いて表示させます.
前のゼミでも同じ作業をしたので,その時のwikiも参考にしてください.

  • 1.zファイルからgrdファイルの作成
xyzデータを読んでグリッドファイルを作るxyz2grdコマンドを使います.
xyz2grd temp.z -Gtemp.grd -R136:07:30/136:37:30/34:35/34:45 -I2.25c/1.5c -Z -F -V -N-999

  • 2.grdファイルからcptファイルの作成
グリッドファイルを読み込んでカラーパレットファイルを作るgrd2cptコマンドを使います.
grd2cpt temp.grd -Ctopo -Z > temp.cpt

  • 3.grdファイルから勾配の計算
グリッドファイルから勾配を計算するgrdgradientコマンドを使います.
grdgradient temp.grd -Gtemp_i.grd -A0/270 -Ne0.9

  • 4.grdファイルからpsファイルの作成
グリッドファイルを読んでマップ(ポストスクリプトファイル)を作成するgrdimageコマンドを使います.
grdimage temp.grd -Itemp_i.grd -Ctemp.cpt -R -JM16 -Ba5mf1m -V -P > temp.ps

できたpsファイルをGSviewを用いて表示させます.結果は下のようになります.

今回のゼミ内容は以上です.お疲れ様でした.

名前:
コメント:


タグ:

+ タグ編集
  • タグ:
最終更新:2008年06月03日 15:11
添付ファイル