]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/trace.rb
Rework GPX import daemon to use libxml2 for speed.
[rails.git] / app / models / trace.rb
index ab99dc2900a2d1962f0316b542616b3dea2afc77..cb49ba62cbc8a8e38878aa5fce76b4422c389799 100644 (file)
@@ -174,7 +174,7 @@ class Trace < ActiveRecord::Base
   def import
     logger.info("GPX Import importing #{name} (#{id}) from #{user.email}")
 
-    gpx = OSM::GPXImporter.new(self.xml_file)
+    gpx = GPX::File.new(self.xml_file)
 
     f_lat = 0
     f_lon = 0
@@ -183,23 +183,24 @@ class Trace < ActiveRecord::Base
     # If there are any existing points for this trace then delete
     # them - we check for existing points first to avoid locking
     # the table in the common case where there aren't any.
-    if Tracepoint.exists?(['gpx_id = ?', self.id])
+    if Tracepoint.find(:first, :conditions => ['gpx_id = ?', self.id])
       Tracepoint.delete_all(['gpx_id = ?', self.id])
     end
 
     gpx.points do |point|
       if first
-        f_lat = point['latitude']
-        f_lon = point['longitude']
+        f_lat = point.latitude
+        f_lon = point.longitude
+        first = false
       end
 
       tp = Tracepoint.new
-      tp.lat = point['latitude'].to_f
-      tp.lon = point['longitude'].to_f
-      tp.altitude = point['altitude'].to_f
-      tp.timestamp = point['timestamp']
+      tp.lat = point.latitude
+      tp.lon = point.longitude
+      tp.altitude = point.altitude
+      tp.timestamp = point.timestamp
       tp.gpx_id = id
-      tp.trackid = point['segment'].to_i
+      tp.trackid = point.segment
       tp.save!
     end
 
@@ -216,8 +217,8 @@ class Trace < ActiveRecord::Base
 
       self.latitude = f_lat
       self.longitude = f_lon
-      self.large_picture = gpx.get_picture(min_lat, min_lon, max_lat, max_lon, gpx.actual_points)
-      self.icon_picture = gpx.get_icon(min_lat, min_lon, max_lat, max_lon)
+      self.large_picture = gpx.picture(min_lat, min_lon, max_lat, max_lon, gpx.actual_points)
+      self.icon_picture = gpx.icon(min_lat, min_lon, max_lat, max_lon)
       self.size = gpx.actual_points
       self.inserted = true
       self.save!