-
- relations = Relation.nodes(visible_nodes.keys).visible +
- Relation.ways(way_ids).visible
-
- # 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)
- relations += Relation.relations(relations.collect(&:id)).visible
-
- # 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.
- relations.uniq.each do |relation|
- doc.root << relation.to_xml_node(changeset_cache, user_display_name_cache)
- end
-
- response.headers["Content-Disposition"] = "attachment; filename=\"map.osm\""
-
- render :xml => doc.to_s