「部門/Ruby/GPXファイルをRubyで扱う/時間平均をとる」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
[[ver.2をつくりました>http://www47.atwiki.jp/cscd/pages/109.html]]
時間平均をとるスクリプトその1。まだRubyでGPXをつくるのはちゃんとできていないので,とりあえずGnuplot用のファイルを出力するようにした。Gnuplot用なので出力ファイルはCSVとしてるけど実態はCSV(Comma Separated Value)ではない。入力ファイルは普通のGPXではなく、[[Unix時間を追加したファイル>http://www47.atwiki.jp/cscd/pages/103.html]]です。
#highlight(ruby){{
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
#座標の時間平均を取る
require "rexml/document"
experiment_name="e101"
in_file_name = "e101_unix.gpx"
out_file_name = "e101_unix_by10min.gpx"
start_time = 0
stop_time = 1314540864
doc = nil
File.open(in_file_name) {|xmlfile|
doc = REXML::Document.new(xmlfile)
}
# http://www6.airnet.ne.jp/manyo/xml/ruby/step10.html
csv1=File.open("raw.csv","w")
csv2=File.open("3600.csv","w")
trkseg = doc.elements["/gpx/trk/trkseg"]
trkseg.elements.each("trkpt"){|trkpt|
longtitude = trkpt.attributes.get_attribute("lon")
latitude = trkpt.attributes.get_attribute("lat")
unixtime = trkpt.attributes.get_attribute("unixtime")
# csv1.puts "#{unixtime},#{longtitude},#{latitude}"
csv1.puts "#{longtitude} #{latitude}"
}
start_time=1314457343
time=start_time
i = 1
sumlong = 0
sumlati = 0
unitime=[]
trkseg = doc.elements["/gpx/trk/trkseg"]
trkseg.elements.each("trkpt"){|trkpt|
longtitude = trkpt.attributes.get_attribute("lon").to_s.to_f
latitude = trkpt.attributes.get_attribute("lat").to_s.to_f
unixtime = trkpt.attributes.get_attribute("unixtime").to_s.to_f
#REXML::attribute => string => float とクラスを変更している
# p unixtime.class
# p unixtime
if unixtime <= time
unitime[i]=unixtime
sumlong = sumlong + longtitude
sumlati = sumlati + latitude
i+=1
else
if i != 1
# csv2.puts "#{(unitime[1].to_f+unitime[i-1].to_f)/2},#{sumlong/(i-1)},#{sumlati/(i-1)}"
csv2.puts "#{sumlong/(i-1)} #{sumlati/(i-1)}"
else #つまりi=1なら
# csv2.puts "#{unitime[1].to_f},#{longtitude},#{latitude}"
csv2.puts "#{longtitude} #{latitude}"
end
i=1
time=time+3600
sumlong = 0
sumlati = 0
end
}
File.open(out_file_name,"w") do |outfile|
doc.write(outfile, 0)
end
}}
Gnuplot用のマクロは次のような感じ。
#highlight(gnuplot){{set term pdf
set output "time_average.pdf
#set size ratio -1
plot [135.44:135.54]"raw.csv" w l, "3600.csv" w l}}
[[ver.2をつくりました>http://www47.atwiki.jp/cscd/pages/109.html]]
時間平均をとるスクリプトその1。まだRubyでGPXをつくるのはちゃんとできていないので,とりあえずGnuplot用のファイルを出力するようにした。Gnuplot用なので出力ファイルはCSVとしてるけど実態はCSV(Comma Separated Value)ではない。入力ファイルは普通のGPXではなく、[[Unix時間を追加したファイル>http://www47.atwiki.jp/cscd/pages/103.html]]です。
#highlight(ruby){{
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
#座標の時間平均を取る
require "rexml/document"
experiment_name="e101"
in_file_name = "e101_unix.gpx"
out_file_name = "e101_unix_by10min.gpx"
start_time = 0
stop_time = 1314540864
doc = nil
File.open(in_file_name) {|xmlfile|
doc = REXML::Document.new(xmlfile)
}
# http://www6.airnet.ne.jp/manyo/xml/ruby/step10.html
csv1=File.open("raw.csv","w")
csv2=File.open("3600.csv","w")
trkseg = doc.elements["/gpx/trk/trkseg"]
trkseg.elements.each("trkpt"){|trkpt|
longtitude = trkpt.attributes.get_attribute("lon")
latitude = trkpt.attributes.get_attribute("lat")
unixtime = trkpt.attributes.get_attribute("unixtime")
# csv1.puts "#{unixtime},#{longtitude},#{latitude}"
csv1.puts "#{longtitude} #{latitude}"
}
start_time=1314457343
time=start_time
i = 1
sumlong = 0
sumlati = 0
unitime=[]
trkseg = doc.elements["/gpx/trk/trkseg"]
trkseg.elements.each("trkpt"){|trkpt|
longtitude = trkpt.attributes.get_attribute("lon").to_s.to_f
latitude = trkpt.attributes.get_attribute("lat").to_s.to_f
unixtime = trkpt.attributes.get_attribute("unixtime").to_s.to_f
#REXML::attribute => string => float とクラスを変更している
# p unixtime.class
# p unixtime
if unixtime <= time
unitime[i]=unixtime
sumlong = sumlong + longtitude
sumlati = sumlati + latitude
i+=1
else
if i != 1
# csv2.puts "#{(unitime[1].to_f+unitime[i-1].to_f)/2},#{sumlong/(i-1)},#{sumlati/(i-1)}"
csv2.puts "#{sumlong/(i-1)} #{sumlati/(i-1)}"
else #つまりi=1なら
# csv2.puts "#{unitime[1].to_f},#{longtitude},#{latitude}"
csv2.puts "#{longtitude} #{latitude}"
end
i=1
time=time+3600
sumlong = 0
sumlati = 0
end
}
File.open(out_file_name,"w") do |outfile|
doc.write(outfile, 0)
end
}}
Gnuplot用のマクロは次のような感じ。
#highlight(gnuplot){{set term pdf
set output "time_average.pdf"
#set size ratio -1
plot [135.44:135.54]"raw.csv" w l, "3600.csv" w l}}