Make the polymorphic relation association work properly.
This commit is contained in:
parent
2cf15b549e
commit
b72fedb162
5 changed files with 17 additions and 11 deletions
|
@ -1,56 +0,0 @@
|
|||
class GeoRecord < ActiveRecord::Base
|
||||
before_save :update_tile
|
||||
|
||||
# Is this node within -90 >= latitude >= 90 and -180 >= longitude >= 180
|
||||
# * returns true/false
|
||||
def in_world?
|
||||
return false if self.lat < -90 or self.lat > 90
|
||||
return false if self.lon < -180 or self.lon > 180
|
||||
return true
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
# Return WGS84 latitude
|
||||
def lat
|
||||
return self.latitude.to_f / 10000000
|
||||
end
|
||||
|
||||
# Return WGS84 longitude
|
||||
def lon
|
||||
return self.longitude.to_f / 10000000
|
||||
end
|
||||
|
||||
# Potlatch projections
|
||||
def lon_potlatch(baselong,masterscale)
|
||||
(self.lon-baselong)*masterscale
|
||||
end
|
||||
|
||||
def lat_potlatch(basey,masterscale)
|
||||
-(lat2y(self.lat)-basey)*masterscale
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def lat2y(a)
|
||||
180/Math::PI * Math.log(Math.tan(Math::PI/4+a*(Math::PI/180)/2))
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
# The node model represents a current existing node, that is, the latest version. Use OldNode for historical nodes.
|
||||
|
||||
class Node < GeoRecord
|
||||
class Node < ActiveRecord::Base
|
||||
require 'xml/libxml'
|
||||
|
||||
include GeoRecord
|
||||
|
||||
set_table_name 'current_nodes'
|
||||
|
||||
validates_presence_of :user_id, :timestamp
|
||||
|
@ -17,8 +17,8 @@ class Node < GeoRecord
|
|||
has_many :way_nodes
|
||||
has_many :ways, :through => :way_nodes
|
||||
|
||||
has_many :containing_relation_members, :as => :member
|
||||
has_many :containing_relations, :through => :containing_relation_members
|
||||
has_many :containing_relation_members, :class_name => "RelationMember", :as => :member
|
||||
has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
|
||||
|
||||
# Sanity check the latitude and longitude and add an error if it's broken
|
||||
def validate_position
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
class OldNode < GeoRecord
|
||||
class OldNode < ActiveRecord::Base
|
||||
include GeoRecord
|
||||
|
||||
set_table_name 'nodes'
|
||||
|
||||
validates_presence_of :user_id, :timestamp
|
||||
|
|
|
@ -10,8 +10,8 @@ class Relation < ActiveRecord::Base
|
|||
has_many :relation_members, :foreign_key => 'id'
|
||||
has_many :relation_tags, :foreign_key => 'id'
|
||||
|
||||
has_many :containing_relation_members, :as => :member
|
||||
has_many :containing_relations, :through => :containing_relation_members
|
||||
has_many :containing_relation_members, :class_name => "RelationMember", :as => :member
|
||||
has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
|
||||
|
||||
def self.from_xml(xml, create=false)
|
||||
begin
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
class Tracepoint < GeoRecord
|
||||
class Tracepoint < ActiveRecord::Base
|
||||
include GeoRecord
|
||||
|
||||
set_table_name 'gps_points'
|
||||
|
||||
validates_numericality_of :trackid, :only_integer => true
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue