Factor out common code for models which deal with geographic points
into a base class.
This commit is contained in:
parent
60d8673e30
commit
dd33fc633c
4 changed files with 33 additions and 87 deletions
29
app/models/geo_record.rb
Normal file
29
app/models/geo_record.rb
Normal file
|
@ -0,0 +1,29 @@
|
|||
class GeoRecord < ActiveRecord::Base
|
||||
before_save :update_tile
|
||||
|
||||
def self.find_by_area(minlat, minlon, maxlat, maxlon, options)
|
||||
self.with_scope(:find => {:conditions => OSM.sql_for_area(minlat, minlon, maxlat, maxlon)}) do
|
||||
return self.find(:all, options)
|
||||
end
|
||||
end
|
||||
|
||||
def update_tile
|
||||
self.tile = QuadTile.tile_for_point(lat, lon)
|
||||
end
|
||||
|
||||
def lat=(l)
|
||||
self.latitude = (l * 10000000).round
|
||||
end
|
||||
|
||||
def lon=(l)
|
||||
self.longitude = (l * 10000000).round
|
||||
end
|
||||
|
||||
def lat
|
||||
return self.latitude.to_f / 10000000
|
||||
end
|
||||
|
||||
def lon
|
||||
return self.longitude.to_f / 10000000
|
||||
end
|
||||
end
|
|
@ -1,5 +1,6 @@
|
|||
class Node < ActiveRecord::Base
|
||||
class Node < GeoRecord
|
||||
require 'xml/libxml'
|
||||
|
||||
set_table_name 'current_nodes'
|
||||
|
||||
validates_presence_of :user_id, :timestamp
|
||||
|
@ -10,34 +11,6 @@ class Node < ActiveRecord::Base
|
|||
has_many :old_nodes, :foreign_key => :id
|
||||
belongs_to :user
|
||||
|
||||
before_save :update_tile
|
||||
|
||||
def self.find_by_area(minlat, minlon, maxlat, maxlon, options)
|
||||
self.with_scope(:find => {:conditions => OSM.sql_for_area(minlat, minlon, maxlat, maxlon)}) do
|
||||
return self.find(:all, options)
|
||||
end
|
||||
end
|
||||
|
||||
def update_tile
|
||||
self.tile = QuadTile.tile_for_point(lat, lon)
|
||||
end
|
||||
|
||||
def lat=(l)
|
||||
self.latitude = (l * 10000000).round
|
||||
end
|
||||
|
||||
def lon=(l)
|
||||
self.longitude = (l * 10000000).round
|
||||
end
|
||||
|
||||
def lat
|
||||
return self.latitude.to_f / 10000000
|
||||
end
|
||||
|
||||
def lon
|
||||
return self.longitude.to_f / 10000000
|
||||
end
|
||||
|
||||
def validate_position
|
||||
errors.add_to_base("Node is not in the world") unless in_world?
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
class OldNode < ActiveRecord::Base
|
||||
class OldNode < GeoRecord
|
||||
set_table_name 'nodes'
|
||||
|
||||
validates_presence_of :user_id, :timestamp
|
||||
|
@ -8,34 +8,6 @@ class OldNode < ActiveRecord::Base
|
|||
|
||||
belongs_to :user
|
||||
|
||||
before_save :update_tile
|
||||
|
||||
def self.find_by_area(minlat, minlon, maxlat, maxlon, options)
|
||||
self.with_scope(:find => {:conditions => OSM.sql_for_area(minlat, minlon, maxlat, maxlon)}) do
|
||||
return self.find(:all, options)
|
||||
end
|
||||
end
|
||||
|
||||
def update_tile
|
||||
self.tile = QuadTile.tile_for_point(lat, lon)
|
||||
end
|
||||
|
||||
def lat=(l)
|
||||
self.latitude = (l * 10000000).round
|
||||
end
|
||||
|
||||
def lon=(l)
|
||||
self.longitude = (l * 10000000).round
|
||||
end
|
||||
|
||||
def lat
|
||||
return self.latitude.to_f / 10000000
|
||||
end
|
||||
|
||||
def lon
|
||||
return self.longitude.to_f / 10000000
|
||||
end
|
||||
|
||||
def validate_position
|
||||
errors.add_to_base("Node is not in the world") unless in_world?
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
class Tracepoint < ActiveRecord::Base
|
||||
class Tracepoint < GeoRecord
|
||||
set_table_name 'gps_points'
|
||||
|
||||
validates_numericality_of :trackid, :only_integer => true
|
||||
|
@ -8,34 +8,6 @@ class Tracepoint < ActiveRecord::Base
|
|||
validates_presence_of :timestamp
|
||||
|
||||
belongs_to :trace, :foreign_key => 'gpx_id'
|
||||
|
||||
before_save :update_tile
|
||||
|
||||
def self.find_by_area(minlat, minlon, maxlat, maxlon, options)
|
||||
self.with_scope(:find => {:conditions => OSM.sql_for_area(minlat, minlon, maxlat, maxlon)}) do
|
||||
return self.find(:all, options)
|
||||
end
|
||||
end
|
||||
|
||||
def update_tile
|
||||
self.tile = QuadTile.tile_for_point(lat, lon)
|
||||
end
|
||||
|
||||
def lat=(l)
|
||||
self.latitude = (l * 10000000).round
|
||||
end
|
||||
|
||||
def lon=(l)
|
||||
self.longitude = (l * 10000000).round
|
||||
end
|
||||
|
||||
def lat
|
||||
return self.latitude.to_f / 10000000
|
||||
end
|
||||
|
||||
def lon
|
||||
return self.longitude.to_f / 10000000
|
||||
end
|
||||
|
||||
def to_xml_node
|
||||
el1 = XML::Node.new 'trkpt'
|
||||
|
|
Loading…
Add table
Reference in a new issue