+ if gpx_file.trackable?
+ track = XML::Node.new 'trk'
+ doc.root << track
+ timestamps = true
+
+ if gpx_file.identifiable?
+ track << (XML::Node.new("name") << gpx_file.name)
+ track << (XML::Node.new("desc") << gpx_file.description)
+ track << (XML::Node.new("url") << url_for(:controller => 'trace', :action => 'view', :display_name => gpx_file.user.display_name, :id => gpx_file.id))
+ end
+ else
+ # use the anonymous track segment if the user hasn't allowed
+ # their GPX points to be tracked.
+ timestamps = false
+ if anon_track.nil?
+ anon_track = XML::Node.new 'trk'
+ doc.root << anon_track
+ end
+ track = anon_track
+ end
+ end
+
+ if trackid != point.trackid
+ if gpx_file.trackable?
+ trkseg = XML::Node.new 'trkseg'
+ track << trkseg
+ trackid = point.trackid
+ else
+ if anon_trkseg.nil?
+ anon_trkseg = XML::Node.new 'trkseg'
+ anon_track << anon_trkseg
+ end
+ trkseg = anon_trkseg
+ end
+ end
+
+ trkseg << point.to_xml_node(timestamps)
+ end
+
+ response.headers["Content-Disposition"] = "attachment; filename=\"tracks.gpx\""
+
+ render :text => doc.to_s, :content_type => "text/xml"
+ end