points = nodes_not_used_in_area.collect { |n| [n.id, n.lon_potlatch(baselong,masterscale), n.lat_potlatch(basey,masterscale), n.tags_as_hash] }
# find the relations used by those nodes and ways
- relation_ids = (Relation.find_for_nodes_and_ways(nodes_in_area.collect {|n| n.id}, way_ids)).collect {|n| n.id}.uniq
+ relations = nodes_in_area.collect { |node| node.containing_relations.visible }.flatten +
+ way_ids.collect { |id| Way.find(id).containing_relations.visible }.flatten
+ relation_ids = relations.collect { |relation| relation.id }.uniq
[way_ids,points,relation_ids]
end
return
end
- relations = Array.new
-
doc = OSM::API.new.get_xml_doc
# get ways
end
end
- relations = Relation.find_for_nodes_and_ways(visible_nodes.keys, way_ids)
+ relations = visible_nodes.values.collect { |node| node.containing_relations.visible }.flatten +
+ way_ids.collect { |id| Way.find(id).containing_relations.visible }.flatten
# we do not normally return the "other" partners referenced by an relation,
# e.g. if we return a way A that is referenced by relation X, and there's
# another way B also referenced, that is not returned. But we do make
# an exception for cases where an relation references another *relation*;
# in that case we return that as well (but we don't go recursive here)
- relation_ids = relations.collect { |relation| relation.id }
- if relation_ids.length > 0
- relations += Relation.find_by_sql("select e.* from current_relations e,current_relation_members em where " +
- "e.visible=1 and " +
- "em.id = e.id and em.member_type='relation' and em.member_id in (#{relation_ids.join(',')})")
- end
+ relations += relations.collect { |relation| relation.containing_relations.visible }.flatten
# this "uniq" may be slightly inefficient; it may be better to first collect and output
# all node-related relations, then find the *not yet covered* way-related ones etc.
has_many :ways, :through => :way_nodes
has_many :containing_relation_members, :class_name => "RelationMember", :as => :member
- has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
+ has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation, :extend => ObjectFinder
# Sanity check the latitude and longitude and add an error if it's broken
def validate_position
has_many :relation_tags, :foreign_key => 'id'
has_many :containing_relation_members, :class_name => "RelationMember", :as => :member
- has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
+ has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation, :extend => ObjectFinder
def self.from_xml(xml, create=false)
begin
return el1
end
-
- # collect relationships. currently done in one big block at the end;
- # may need to move this upwards if people want automatic completion of
- # relationships, i.e. deliver referenced objects like we do with ways...
- # FIXME: rip out the fucking SQL
- def self.find_for_nodes_and_ways(node_ids, way_ids)
- relations = []
-
- if node_ids.length > 0
- relations += Relation.find_by_sql("select e.* from current_relations e,current_relation_members em where " +
- "e.visible=1 and " +
- "em.id = e.id and em.member_type='node' and em.member_id in (#{node_ids.join(',')})")
- end
- if way_ids.length > 0
- relations += Relation.find_by_sql("select e.* from current_relations e,current_relation_members em where " +
- "e.visible=1 and " +
- "em.id = e.id and em.member_type='way' and em.member_id in (#{way_ids.join(',')})")
- end
-
- relations # if you don't do this then it returns nil and not []
- end
-
-
# FIXME is this really needed?
def members
unless @members
has_many :way_tags, :foreign_key => 'id'
has_many :containing_relation_members, :class_name => "RelationMember", :as => :member
- has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
+ has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation, :extend => ObjectFinder
def self.from_xml(xml, create=false)
begin
***************************************************************************
-Please do not reply to this email. Use the OpenStreetMap web site to reply.
+* *
+* Please do not reply to this email. *
+* Use the OpenStreetMap web site to reply. *
+* *
+* Bitte antworten Sie nicht auf diese E-Mail. *
+* Verwenden Sie die OpenStreetMap Website zum antworten. *
+* *
+* Por favor, no responda a este mensaje. *
+* Utilice el OpenStreetMap sitio web para responder. *
+* *
+* S’il vous plaît de ne pas répondre à ce message. *
+* Utilisez le OpenStreetMap site Web pour y répondre. *
+* *
***************************************************************************
Hi <%= @to_user %>,
or reply at <%= @replyurl %>
***************************************************************************
-Please do not reply to this email. Use the OpenStreetMap web site to reply.
+* *
+* Please do not reply to this email. *
+* Use the OpenStreetMap web site to reply. *
+* *
+* Bitte antworten Sie nicht auf diese E-Mail. *
+* Verwenden Sie die OpenStreetMap Website zum antworten. *
+* *
+* Por favor, no responda a este mensaje. *
+* Utilice el OpenStreetMap sitio web para responder. *
+* *
+* S’il vous plaît de ne pas répondre à ce message. *
+* Utilisez le OpenStreetMap site Web pour y répondre. *
+* *
***************************************************************************
***************************************************************************
-Please do not reply to this email. Use the OpenStreetMap web site to reply.
+* *
+* Please do not reply to this email. *
+* Use the OpenStreetMap web site to reply. *
+* *
+* Bitte antworten Sie nicht auf diese E-Mail. *
+* Verwenden Sie die OpenStreetMap Website zum antworten. *
+* *
+* Por favor, no responda a este mensaje. *
+* Utilice el OpenStreetMap sitio web para responder. *
+* *
+* S’il vous plaît de ne pas répondre à ce message. *
+* Utilisez le OpenStreetMap site Web pour y répondre. *
+* *
***************************************************************************
Hi <%= @to_user %>,
and you can reply at <%= @replyurl %>
***************************************************************************
-Please do not reply to this email. Use the OpenStreetMap web site to reply.
+* *
+* Please do not reply to this email. *
+* Use the OpenStreetMap web site to reply. *
+* *
+* Bitte antworten Sie nicht auf diese E-Mail. *
+* Verwenden Sie die OpenStreetMap Website zum antworten. *
+* *
+* Por favor, no responda a este mensaje. *
+* Utilice el OpenStreetMap sitio web para responder. *
+* *
+* S’il vous plaît de ne pas répondre à ce message. *
+* Utilisez le OpenStreetMap site Web pour y répondre. *
+* *
***************************************************************************
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
adapter: mysql
- database: osm
- user: root
+ database: openstreetmap
+ username: openstreetmap
+ password: openstreetmap
host: localhost
# Warning: The database defined as 'test' will be erased and
--- /dev/null
+module ObjectFinder
+ def visible
+ find :all, :conditions => "#{proxy_reflection.table_name}.visible = 1"
+ end
+end