end
def large_picture_name
- "#{GPX_IMAGE_DIR}/#{id}.gif"
+ "#{Settings.gpx_image_dir}/#{id}.gif"
end
def icon_picture_name
- "#{GPX_IMAGE_DIR}/#{id}_icon.gif"
+ "#{Settings.gpx_image_dir}/#{id}_icon.gif"
end
def trace_name
- "#{GPX_TRACE_DIR}/#{id}.gpx"
+ "#{Settings.gpx_trace_dir}/#{id}.gpx"
end
def mime_type
# If there are any existing points for this trace then delete them
Tracepoint.where(:gpx_id => id).delete_all
- gpx.points do |point|
- if first
- f_lat = point.latitude
- f_lon = point.longitude
- first = false
+ gpx.points.each_slice(1_000) do |points|
+ # Gather the trace points together for a bulk import
+ tracepoints = []
+
+ points.each do |point|
+ if first
+ f_lat = point.latitude
+ f_lon = point.longitude
+ first = false
+ end
+
+ tp = Tracepoint.new
+ tp.lat = point.latitude
+ tp.lon = point.longitude
+ tp.altitude = point.altitude
+ tp.timestamp = point.timestamp
+ tp.gpx_id = id
+ tp.trackid = point.segment
+ tracepoints << tp
end
- tp = Tracepoint.new
- tp.lat = point.latitude
- tp.lon = point.longitude
- tp.altitude = point.altitude
- tp.timestamp = point.timestamp
- tp.gpx_id = id
- tp.trackid = point.segment
- tp.save!
+ # Run the before_save and before_create callbacks, and then import them in bulk with activerecord-import
+ tracepoints.each do |tp|
+ tp.run_callbacks(:save) { false }
+ tp.run_callbacks(:create) { false }
+ end
+
+ Tracepoint.import!(tracepoints)
end
if gpx.actual_points.positive?