2   class TracepointsController < ApiController
 
   5     # Get an XML response containing a list of tracepoints that have been uploaded
 
   6     # within the specified bounding box, and in the specified page.
 
   8       # retrieve the page number
 
   9       page = params["page"].to_s.to_i
 
  12         report_error("Page number must be greater than or equal to 0")
 
  16       offset = page * Settings.tracepoints_per_page
 
  19       # check boundary is sane and area within defined
 
  20       # see /config/application.yml
 
  22         raise OSM::APIBadUserInput, "The parameter bbox is required" unless params[:bbox]
 
  24         bbox = BoundingBox.from_bbox_params(params)
 
  27       rescue StandardError => e
 
  28         report_error(e.message)
 
  33       ordered_points = Tracepoint.bbox(bbox).joins(:trace).where(:gpx_files => { :visibility => %w[trackable identifiable] }).order("gpx_id DESC, trackid ASC, timestamp ASC")
 
  34       unordered_points = Tracepoint.bbox(bbox).joins(:trace).where(:gpx_files => { :visibility => %w[public private] }).order("gps_points.latitude", "gps_points.longitude", "gps_points.timestamp")
 
  35       @points = ordered_points.union_all(unordered_points).offset(offset).limit(Settings.tracepoints_per_page).preload(:trace)
 
  37       response.headers["Content-Disposition"] = "attachment; filename=\"tracks.gpx\""
 
  39       render :formats => [:gpx]