調査士会で会員向けに配布された、測地成果2011変換済みの街区基準点データをSIMA形式(CSV)に変換します。
SIMA形式(CSV)では文字コードがShift-JISとされているのでスクリプトもShift-JISで作成すると不幸にならないと思います。
pName = 4
x = 6
y = 7
dName = File.basename(ARGV[0],".*")
sima = <<EOF
G00,00,#{dName},
Z00,/* 座標データ */,
Z01,2,
A00,
EOF
open(ARGV[0]) do |file|
file.each_with_index do |line, i|
if line =~ /\t/
arry = line.split("\t")
else
arry = line.split(",")
end
arry.each do |elem|
elem.strip!
end
if arry[x] && (arry[x][-1] =~ /[0-9]/)
sima = sima + "A01,#{i + 1},#{arry[pName]},#{arry[x]},#{arry[y]},,\n"
end
end
end
sima = sima + "A99,\n"
open(dName + ".sim", "w") do |file|
file.write sima
end
たまに空行があったり項目名が何度も出てきたりするのはif arry[x] && (arry[x][-1] =~ /[0-9]/)
のくだりで弾けていると思います。
スクリプトをcsv2sim.rbと保存した場合下記の様に実行すると入力したCSVと同じディレクトリにさいたま市.sim
というファイルが作成されます。
ruby -Ks csv2sima.rb さいたま市.csv
測量計算ソフトには座標テキストファイルを読み込む機能があるのでその機能を使って読み込むとRubyを使わなくても座標を展開できます。
今回は38ファイル全部を変換したかったのでスクリプトを組んだわけです。
PowerShellから下記のようなコマンドを叩くとディレクトリ内のCSVを一括でSIMAに変換してくれます。
Get-ChildItem -Name *.csv| Where-Object { ruby -Ks.\csv2sim.rb $_ }
pName
、x
、y
の変数に適切な数字を当て込めば別の座標データCSVでもSIMAにできるかもしれません。
ただし、測地成果2011の9系以外のデータの時はZ01,2,
の行を削除するか適切な値に変更しないといけないので注意が必要です。