ここでは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