ここではmod2gmt.rbの内容について説明を行います。


まず、GRASSで作成し、座標をまるめた座標値のデータをGMTで読むためのデータの下地を作成します。

読み込み部分のフローとしては次の通り。
指定されたファイルをオープンし、ヘッダ部分を読み飛ばし、Lで始まるアークのヘッダ情報から読み始めます。
ヘッダよりアークの個数を変数として取得します。
アークの情報をそれぞれ、x,yで取得します。
あわせて、属性情報(ここではアークの番号)を取得し、xyデータに追記します。

↓-------読み込み部---------


file = "epi4.mod" ←ファイル指定です
f = open(file)

lines = []      ←配列(lines)の初期化
while str = f.gets 
 if /^L/ =~ str   ←//で囲まれた部分(文字)が行の先頭にある
   v = str.chop.split; n = v[1].to_i ←入力したデータを分割し、2つ目のデータV[1]を変数nとして取得。to_iは整数型(integer)で取得することの命令
   arc = []     ←配列(arc)の初期化
   n.times do    ←n回以下の作業を繰り返す(nは上で定義済み)
    u = f.gets.chop.split      ←Lより下の座標データをuとして取得し、分割している。
    x = u[0].to_f; y = u[1].to_f ←x,yの座標をそれぞれ不動小数型(float)で取得
    arc << [x,y]  ←arcという配列(箱のようなもの)に配置
   end
   v = f.gets.chop.split ←属性番号を取り出し
   lines << [v[1].to_i,arc]
 end
end
f.close

↑-------以上読み込み部------------



ここでは、先ほど取得したデータを線(アーク)の属性情報をout_text、座標情報をout_lineというファイルに書き込む作業を行います。
out_textではアーク単位で構成点の座標値の総和を取ったものを、座標の個数で割り、アークの属性を記入する場所の中心点とする。
out_lineではアークの情報を取り込めるようにデータの並びを加工し、記載する。

GMT形式へのデータ変換部分のフローとしては次の通り。
データがあるだけ、作業を繰り返す。
アーク単位でデータを読み込み、座標情報はout_lineへそのまま書き込む。
あわせて、アーク単位で座標値をx,yそれぞれで総和し、座標の個数で割り、num(属性情報)とあわせて、out_textに書き込む。

↓-------GMT形式へのデータの変換---------


out_text = "epi4.text"; out1 = open(out_text,"w")
out_line = "epi4.line"; out2 = open(out_line,"w")
out2.printf ">\n" ←GMTで読むために先頭には必ず「>」マークを入れ、改行する。

lines.each do |num,arc| ←データがあるだけ次の命令を繰り返す
 xm = 0.0; ym = 0.0; m = arc.size ←アークについて初期化
  arc.each do |x,y|
  xm += x; ym += y ←アーク単位の構成点の座標値をx,yそれぞれで総和していく。
  out2.printf "%.2f %.2f\n", x,y
 end
 out2.printf ">\n"
 xm /= m; ym /= m ←アーク単位で座標値を足したものを個数で割る
 out1.printf "%.3f %.3f 6 30.0 31 MC %d\n", xm,ym,num ←中身は左からx(%.3f),y(%.3f),size(6),angle(30.0),fontN(31),justify(MC(Middle,Center)),text(%d)の順
end
out1.close;out2.close; ←追加した方がよい(ファイルを開く命令を行った場合は、必ず閉じる命令を記入がよい。言語によっては開きっぱなしになり、マシンに負荷をかけることがあるため。)

↑-------GMT形式へのデータの変換---------


この2つのデータを、GMTで読み込ませます。
以上

タグ:

+ タグ編集
  • タグ:
最終更新:2007年06月29日 15:51