部門 > Ruby > GPXファイルをRubyで扱う > 時間平均をとる


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


時間平均をとるスクリプトその1。まだRubyでGPXをつくるのはちゃんとできていないので,とりあえずGnuplot用のファイルを出力するようにした。Gnuplot用なので出力ファイルはCSVとしてるけど実態はCSV(Comma Separated Value)ではない。入力ファイルは普通のGPXではなく、Unix時間を追加したファイルです。
#!/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用のマクロは次のような感じ。
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