include GeoRecord
include ConsistencyValidations
+ include NotRedactable
- set_table_name 'current_nodes'
+ self.table_name = "current_nodes"
belongs_to :changeset
- has_many :old_nodes, :order => :version
+ has_many :old_nodes, -> { order(:version) }
has_many :way_nodes
has_many :ways, :through => :way_nodes
validate :validate_position
validates_associated :changeset
- scope :visible, where(:visible => true)
- scope :invisible, where(:visible => false)
+ scope :visible, -> { where(:visible => true) }
+ scope :invisible, -> { where(:visible => false) }
# Sanity check the latitude and longitude and add an error if it's broken
def validate_position
# Also adheres to limitations such as within max_number_of_nodes
#
def self.search(bounding_box, tags = {})
- min_lon, min_lat, max_lon, max_lat = *bounding_box
# @fixme a bit of a hack to search for only visible nodes
# couldn't think of another to add to tags condition
#conditions_hash = tags.merge({ 'visible' => 1 })
#end
#conditions = keys.join(' AND ')
- find_by_area(min_lat, min_lon, max_lat, max_lon,
- :conditions => {:visible => true},
- :limit => MAX_NUMBER_OF_NODES+1)
+ find_by_area(bounding_box, :conditions => {:visible => true},
+ :limit => MAX_NUMBER_OF_NODES+1)
end
# Read in xml as text and return it's Node object representation
raise OSM::APIBadXMLError.new("node", pt, "lat missing") if pt['lat'].nil?
raise OSM::APIBadXMLError.new("node", pt, "lon missing") if pt['lon'].nil?
- node.lat = pt['lat'].to_f
- node.lon = pt['lon'].to_f
+ node.lat = OSM.parse_float(pt['lat'], OSM::APIBadXMLError, "node", pt, "lat not a number")
+ node.lon = OSM.parse_float(pt['lon'], OSM::APIBadXMLError, "node", pt, "lon not a number")
raise OSM::APIBadXMLError.new("node", pt, "Changeset id is missing") if pt['changeset'].nil?
node.changeset_id = pt['changeset'].to_i
# and set manually before the actual delete
node.visible = true
+ # Start with no tags
+ node.tags = Hash.new
+
+ # Add in any tags from the XML
pt.find('tag').each do |tag|
raise OSM::APIBadXMLError.new("node", pt, "tag is missing key") if tag['k'].nil?
raise OSM::APIBadXMLError.new("node", pt, "tag is missing value") if tag['v'].nil?
# the bounding box around a node, which is used for determining the changeset's
# bounding box
def bbox
- [ longitude, latitude, longitude, latitude ]
+ BoundingBox.new(longitude, latitude, longitude, latitude)
end
# Should probably be renamed delete_from to come in line with update
def to_xml_node(changeset_cache = {}, user_display_name_cache = {})
el1 = XML::Node.new 'node'
el1['id'] = self.id.to_s
- el1['lat'] = self.lat.to_s
- el1['lon'] = self.lon.to_s
el1['version'] = self.version.to_s
el1['changeset'] = self.changeset_id.to_s
+ if self.visible?
+ el1['lat'] = self.lat.to_s
+ el1['lon'] = self.lon.to_s
+ end
+
if changeset_cache.key?(self.changeset_id)
# use the cache if available
else