Ticket #742: rails_port_gpx.diff

File rails_port_gpx.diff, 2.9 KB (added by openstreetmap@…, 12 years ago)

Patch to pull notes from uploaded gpx files (untested due to rmagick install/version issues plus gps_points has no id field apparently needed by trace.rb#186 exists?)

Line 
1Index: osm.rb
2===================================================================
3--- osm.rb      (revision 7082)
4+++ osm.rb      (working copy)
5@@ -111,9 +111,25 @@
6         gotlatlon = true
7         gotele = false
8         gotdate = false
9+        gotname = false
10         @possible_points += 1
11       end
12+     
13+      parser.listen( :start_element,  %w{ wpt }) do |uri,localname,qname,attributes|
14+        lat = attributes['lat'].to_f
15+        lon = attributes['lon'].to_f
16+        gotlatlon = true
17+        gotele = false
18+        gotdate = false
19+        gotname = false
20+        @possible_points += 1
21+      end
22 
23+      parser.listen( :characters, %w{ name } ) do |text|
24+        name = text
25+        gotname = true
26+      end
27+
28       parser.listen( :characters, %w{ ele } ) do |text|
29         ele = text
30         gotele = true
31@@ -136,20 +152,38 @@
32       parser.listen( :end_element, %w{ trkpt } ) do |uri,localname,qname|
33         if gotlatlon && gotdate
34           ele = '0' unless gotele
35+          name = '' unless gotname
36           if lat < 90 && lat > -90 && lon > -180 && lon < 180
37             @actual_points += 1
38-            yield Hash['latitude' => lat, 'longitude' => lon, 'timestamp' => date, 'altitude' => ele, 'segment' => @tracksegs]
39+            yield Hash['latitude' => lat, 'longitude' => lon, 'timestamp' => date, 'altitude' => ele, 'segment' => @tracksegs, 'name' => name]
40           end
41         end
42         gotlatlon = false
43         gotele = false
44         gotdate = false
45       end
46+     
47+      parser.listen( :end_element, %w{ wpt } ) do |uri,localname,qname|
48+        if gotlatlon && gotdate && gotname
49+          ele = '0' unless gotele
50+          if lat < 90 && lat > -90 && lon > -180 && lon < 180
51+            @actual_points += 1
52+            yield Hash['latitude' => lat, 'longitude' => lon, 'timestamp' => date, 'altitude' => ele, 'name' => name]
53+          end
54+        end
55+        gotlatlon = false
56+        gotele = false
57+        gotdate = false
58+        gotname = false
59+      end
60 
61       parser.parse
62     end
63 
64     def get_picture(min_lat, min_lon, max_lat, max_lon, num_points)
65       #puts "getting picfor bbox #{min_lat},#{min_lon} - #{max_lat},#{max_lon}"
66       frames = 10
67       width = 250
68Index: trace.rb
69===================================================================
70--- trace.rb    (revision 7082)
71+++ trace.rb    (working copy)
72@@ -192,6 +192,19 @@
73         f_lat = point['latitude']
74         f_lon = point['longitude']
75       end
76+     
77+      if point['name']
78+        note = Note.new
79+        note.lat = point['latitude'].to_f
80+        note.lon = point['longitude'].to_f
81+        note.summary = point['name'].to_f
82+        note.trace = id
83+        note.visible = true
84+        note.date = point['timestamp']
85+        note.timestamp = point['timestamp']
86+        note.user_id = user.id
87+        note.save!
88+      end
89 
90       tp = Tracepoint.new
91       tp.lat = point['latitude'].to_f