# 2010-01-01 K.OHWADA require "csv" header = < EOS footer = < EOS trkseg_begin = '' def name(fname) n = fname.split(".")[0] s ='' + n + '' return s end def trkpt_conv(a) time = time_conv( a[1] ) lat = lat_conv( a[2] ) lon = lon_conv( a[4] ) ele = ele_conv( a[9] ) s = '' + "\n" s += '' + ele + '' + "\n" s += '' + "\n" s += '' + "\n" return s end def time_conv(str) /(\d\d)(\d\d)(\d\d)/ =~ str ret = @date + 'T' + $1 + ':' + $2 + ':' + $3 + 'Z' return ret end def lat_conv(str) /(\d\d)(.*)/ =~ str ret = $1.to_f + ( $2.to_f / 60 ) return format("%.8f", ret) end def lon_conv(str) /(\d\d\d)(.*)/ =~ str ret = $1.to_f + ( $2.to_f / 60 ) return format("%.8f", ret) end def ele_conv(str) ret = str.to_i.to_s return ret end fname = ARGV[0] @date = ARGV[1] if fname.nil? then puts 'usage:' puts 'ruby nmea_gpx.rb input.nmea.txt year-month-day > output.gpx.txt' puts 'ex) year-month-day 2009-12-25' exit end if @date.nil? @date = Time.now.strftime("%Y-%m-%d") end puts header puts name(fname) puts trkseg_begin CSV.open(fname, 'r') do |row| if ( row[0] == '$GPGGA') puts trkpt_conv(row) end end puts footer