- pt.find('tag').each do |tag|
- raise OSM::APIBadXMLError.new("way", pt, "tag is missing key") if tag['k'].nil?
- raise OSM::APIBadXMLError.new("way", pt, "tag is missing value") if tag['v'].nil?
- way.add_tag_keyval(tag['k'], tag['v'])
- end
-
- pt.find('nd').each do |nd|
- way.add_nd_num(nd['ref'])
- end
-
- return way
- end
-
- # Find a way given it's ID, and in a single SQL call also grab its nodes
- #
-
- # You can't pull in all the tags too unless we put a sequence_id on the way_tags table and have a multipart key
- def self.find_eager(id)
- way = Way.find(id, :include => {:way_nodes => :node})
- #If waytag had a multipart key that was real, you could do this:
- #way = Way.find(id, :include => [:way_tags, {:way_nodes => :node}])
- end
-
- # Find a way given it's ID, and in a single SQL call also grab its nodes and tags
- def to_xml
- doc = OSM::API.new.get_xml_doc
- doc.root << to_xml_node()
- return doc
- end
-
- def to_xml_node(visible_nodes = nil, changeset_cache = {}, user_display_name_cache = {})
- el1 = XML::Node.new 'way'
- el1['id'] = self.id.to_s
- el1['visible'] = self.visible.to_s
- el1['timestamp'] = self.timestamp.xmlschema
- el1['version'] = self.version.to_s
- el1['changeset'] = self.changeset_id.to_s
-
- if changeset_cache.key?(self.changeset_id)
- # use the cache if available
- else
- changeset_cache[self.changeset_id] = self.changeset.user_id
- end
-
- user_id = changeset_cache[self.changeset_id]
-
- if user_display_name_cache.key?(user_id)
- # use the cache if available
- elsif self.changeset.user.data_public?
- user_display_name_cache[user_id] = self.changeset.user.display_name
- else
- user_display_name_cache[user_id] = nil
- end
-
- if not user_display_name_cache[user_id].nil?
- el1['user'] = user_display_name_cache[user_id]
- el1['uid'] = user_id.to_s
- end