From: Tom Hughes Date: Sun, 31 May 2009 11:14:19 +0000 (+0000) Subject: Optimise data loading for browsing ways. X-Git-Tag: live~7342 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/d2f2dc17781a75d6aff250e5e9fa623d711fc25f Optimise data loading for browsing ways. --- diff --git a/app/controllers/browse_controller.rb b/app/controllers/browse_controller.rb index e9081f026..d8399c19e 100644 --- a/app/controllers/browse_controller.rb +++ b/app/controllers/browse_controller.rb @@ -26,7 +26,7 @@ class BrowseController < ApplicationController end def way - @way = Way.find(params[:id]) + @way = Way.find(params[:id], :include => [:way_tags, {:changeset => :user}, {:nodes => [:node_tags, {:ways => :way_tags}]}, :containing_relation_members]) @next = Way.find(:first, :order => "id ASC", :conditions => [ "visible = true AND id > :id", { :id => @way.id }] ) @prev = Way.find(:first, :order => "id DESC", :conditions => [ "visible = true AND id < :id", { :id => @way.id }] ) rescue ActiveRecord::RecordNotFound @@ -35,7 +35,7 @@ class BrowseController < ApplicationController end def way_history - @way = Way.find(params[:id]) + @way = Way.find(params[:id], :include => [:way_tags, {:old_ways => {:changeset => :user}}]) rescue ActiveRecord::RecordNotFound @type = "way" render :action => "not_found", :status => :not_found diff --git a/app/controllers/way_controller.rb b/app/controllers/way_controller.rb index cc4f1fa38..2cd7abf60 100644 --- a/app/controllers/way_controller.rb +++ b/app/controllers/way_controller.rb @@ -60,18 +60,19 @@ class WayController < ApplicationController end def full - way = Way.find(params[:id]) + way = Way.find(params[:id], :include => {:nodes => :node_tags}) if way.visible - nd_ids = way.nds + [-1] - nodes = Node.find(:all, :conditions => ["visible = ? AND id IN (#{nd_ids.join(',')})", true]) - - # Render + changeset_cache = {} + user_display_name_cache = {} + doc = OSM::API.new.get_xml_doc - nodes.each do |node| - doc.root << node.to_xml_node() + way.nodes.each do |node| + if node.visible + doc.root << node.to_xml_node(changeset_cache, user_display_name_cache) + end end - doc.root << way.to_xml_node() + doc.root << way.to_xml_node(nil, changeset_cache, user_display_name_cache) render :text => doc.to_s, :content_type => "text/xml" else