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'
|
require 'xml/libxml'
|
||||||
|
|
||||||
set_table_name 'current_nodes'
|
set_table_name 'current_nodes'
|
||||||
|
|
||||||
validates_presence_of :user_id, :timestamp
|
validates_presence_of :user_id, :timestamp
|
||||||
|
@ -10,34 +11,6 @@ class Node < ActiveRecord::Base
|
||||||
has_many :old_nodes, :foreign_key => :id
|
has_many :old_nodes, :foreign_key => :id
|
||||||
belongs_to :user
|
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
|
def validate_position
|
||||||
errors.add_to_base("Node is not in the world") unless in_world?
|
errors.add_to_base("Node is not in the world") unless in_world?
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class OldNode < ActiveRecord::Base
|
class OldNode < GeoRecord
|
||||||
set_table_name 'nodes'
|
set_table_name 'nodes'
|
||||||
|
|
||||||
validates_presence_of :user_id, :timestamp
|
validates_presence_of :user_id, :timestamp
|
||||||
|
@ -8,34 +8,6 @@ class OldNode < ActiveRecord::Base
|
||||||
|
|
||||||
belongs_to :user
|
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
|
def validate_position
|
||||||
errors.add_to_base("Node is not in the world") unless in_world?
|
errors.add_to_base("Node is not in the world") unless in_world?
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class Tracepoint < ActiveRecord::Base
|
class Tracepoint < GeoRecord
|
||||||
set_table_name 'gps_points'
|
set_table_name 'gps_points'
|
||||||
|
|
||||||
validates_numericality_of :trackid, :only_integer => true
|
validates_numericality_of :trackid, :only_integer => true
|
||||||
|
@ -8,34 +8,6 @@ class Tracepoint < ActiveRecord::Base
|
||||||
validates_presence_of :timestamp
|
validates_presence_of :timestamp
|
||||||
|
|
||||||
belongs_to :trace, :foreign_key => 'gpx_id'
|
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
|
def to_xml_node
|
||||||
el1 = XML::Node.new 'trkpt'
|
el1 = XML::Node.new 'trkpt'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue