X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/2803612d9db2f89c4eaa57bbf4606b56967caa62..6b4803d87fc957d0a779ebedc39e8499af1b7733:/app/controllers/api_controller.rb?ds=sidebyside diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index aa8419414..bfe26f542 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -1,5 +1,8 @@ class ApiController < ApplicationController + before_filter :authorize + after_filter :compress_output + def map response.headers["Content-Type"] = 'application/xml' # Figure out the bbox @@ -24,7 +27,7 @@ class ApiController < ApplicationController if node_ids.length > 0 node_ids_sql = "(#{node_ids.join(',')})" # get the referenced segments - segments = Segment.find_by_sql "select * from segments where node_a in #{node_ids_sql} or node_b in #{node_ids_sql}" + segments = Segment.find_by_sql "select * from current_segments where visible = 1 and (node_a in #{node_ids_sql} or node_b in #{node_ids_sql})" end # see if we have nay missing nodes segments_nodes = segments.collect {|segment| segment.node_a } @@ -37,34 +40,28 @@ class ApiController < ApplicationController # get missing nodes if there are any nodes += Node.find(missing_nodes) if missing_nodes.length > 0 - doc = XML::Document.new - doc.encoding = 'UTF-8' - root = XML::Node.new 'osm' - root['version'] = API_VERSION - root['generator'] = 'OpenStreetMap server' - doc.root = root + doc = OSM::API.get_xml_doc # get ways # find which ways are needed segment_ids = segments.collect {|segment| segment.id } ways = Array.new if segment_ids.length > 0 - way_segments = WaySegment.find_by_segment_id(segment_ids) + way_segments = WaySegment.find_all_by_segment_id(segment_ids) way_ids = way_segments.collect {|way_segment| way_segment.id } - - ways = Way.find(segment_ids) + ways = Way.find(way_ids) # NB: doesn't pick up segments, tags from db until accessed via way.way_segments etc. end nodes.each do |node| - root << node.to_xml_node() + doc.root << node.to_xml_node() end segments.each do |segment| - root << segment.to_xml_node() + doc.root << segment.to_xml_node() end ways.each do |way| - root << way.to_xml_node() + doc.root << way.to_xml_node() end render :text => doc.to_s