Use an enumerator for gpx.points, and process the the points in batches
This commit is contained in:
parent
07fdcf638e
commit
c1bf73bee4
2 changed files with 27 additions and 21 deletions
|
@ -289,31 +289,35 @@ class Trace < ActiveRecord::Base
|
|||
# If there are any existing points for this trace then delete them
|
||||
Tracepoint.where(:gpx_id => id).delete_all
|
||||
|
||||
# Gather the trace points together for a bulk import
|
||||
tracepoints = []
|
||||
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
|
||||
tracepoints << tp
|
||||
end
|
||||
# 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
|
||||
|
||||
# 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 }
|
||||
Tracepoint.import!(tracepoints)
|
||||
end
|
||||
Tracepoint.import!(tracepoints, :batch_size => 1_000)
|
||||
|
||||
if gpx.actual_points.positive?
|
||||
max_lat = Tracepoint.where(:gpx_id => id).maximum(:latitude)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue