From: Steve Coast Date: Fri, 1 Dec 2006 17:56:13 +0000 (+0000) Subject: gpx insert now works X-Git-Tag: live~8593 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/92418b7954d8915734f07a66abf76f52b437a517 gpx insert now works --- diff --git a/app/models/notifier.rb b/app/models/notifier.rb index 80c1b1f82..c165dca96 100644 --- a/app/models/notifier.rb +++ b/app/models/notifier.rb @@ -21,18 +21,20 @@ class Notifier < ActionMailer::Base @body['pass'] = pass end - def gpx_success(trace) - @recipients = user.email + def gpx_success(trace, possible_points) + @recipients = trace.user.email @from = 'abuse@openstreetmap.org' @subject = '[OpenStreetMap] GPX Import success' @body['trace_name'] = trace.name @body['trace_points'] = trace.size + @body['possible_points'] = possible_points end - def gpx_failure(trace) - @recipients = user.email + def gpx_failure(trace, error) + @recipients = trace.user.email @from = 'abuse@openstreetmap.org' @subject = '[OpenStreetMap] GPX Import failure' @body['trace_name'] = trace.name + @body['error'] = error end end diff --git a/app/views/notifier/gpx_failure.rhtml b/app/views/notifier/gpx_failure.rhtml index 6a2f81e29..61b087729 100644 --- a/app/views/notifier/gpx_failure.rhtml +++ b/app/views/notifier/gpx_failure.rhtml @@ -4,4 +4,6 @@ It looks like your GPX file <%= @trace_name %> -failed to import :-( +failed to import. Here's the error: + + <%= @error %> diff --git a/app/views/notifier/gpx_success.rhtml b/app/views/notifier/gpx_success.rhtml index 5e7751615..ae05bb83b 100644 --- a/app/views/notifier/gpx_success.rhtml +++ b/app/views/notifier/gpx_success.rhtml @@ -4,4 +4,5 @@ It looks like your GPX file <%= @trace_name %> -loaded successfully with <%= @trace_points %> points. +loaded successfully with <%= @trace_points %> out of a possible +<%= @possible_points %> points. diff --git a/lib/daemons/gpx_import.rb b/lib/daemons/gpx_import.rb index 015a27916..1fc60858a 100755 --- a/lib/daemons/gpx_import.rb +++ b/lib/daemons/gpx_import.rb @@ -10,6 +10,8 @@ Signal.trap("TERM") do $running = false end +logger = ActiveRecord::Base.logger + while($running) do ActiveRecord::Base.logger.info("GPX Import daemon wake @ #{Time.now}.") @@ -20,16 +22,33 @@ while($running) do traces.each do |trace| begin - ActiveRecord::Base.logger.info("GPX Import importing #{trace.name} from #{trace.user.email}") - - # gpx = OSM::GPXImporter.new('/tmp/2.gpx') - # gpx.points do |point| - # puts point['latitude'] - # end - - Notifier::deliver_gpx_success(trace) - rescue - Notifier::deliver_gpx_failure(trace) + logger.info("GPX Import importing #{trace.name} from #{trace.user.email}") + + gzipped = `file -b /tmp/#{trace.id}.gpx`.chomp =~/^gzip/ + + if gzipped + logger.info("gzipped") + else + logger.info("not gzipped") + end + gpx = OSM::GPXImporter.new("/tmp/#{trace.id}.gpx") + + gpx.points do |point| + tp = Tracepoint.new + tp.latitude = point['latitude'] + tp.latitude = point['longitude'] + tp.altitude = point['altitude'] + tp.user_id = trace.user.id + tp.gpx_id = trace.id + tp.trackid = point['segment'] + end + trace.size = gpx.actual_points + trace.inserted = true + trace.save + Notifier::deliver_gpx_success(trace, gpx.possible_points) + rescue Exception => ex + trace.destroy + Notifier::deliver_gpx_failure(trace, ex.to_s) end end end diff --git a/lib/osm.rb b/lib/osm.rb index 41c587459..af9608132 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -14,11 +14,13 @@ module OSM class GPXImporter attr_reader :possible_points + attr_reader :actual_points attr_reader :tracksegs def initialize(filename) @filename = filename @possible_points = 0 + @actual_points = 0 @tracksegs = 0 end @@ -61,6 +63,7 @@ module OSM if gotlatlon && gotdate ele = '0' unless gotele if lat < 90 && lat > -90 && lon > -180 && lon < 180 + @actual_points += 1 yield Hash['latitude' => lat,'longitude' => lon,'timestamp' => date,'altitude' => ele,'segment' => @tracksegs] end end