class ApiController < ApplicationController
session :off
+ before_filter :check_read_availability, :except => [:capabilities]
after_filter :compress_output
#COUNT is the number of map requests to allow before exiting and starting a new process
end
# get all the nodes
- nodes = Node.find(:all, :conditions => ['latitude BETWEEN ? AND ? AND longitude BETWEEN ? AND ? AND visible = 1', min_lat, max_lat, min_lon, max_lon])
+ nodes = Node.find_by_area(min_lat, min_lon, max_lat, max_lon, :conditions => "visible = 1")
node_ids = nodes.collect {|node| node.id }
# 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...
- 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 (#{visible_nodes.keys.join(',')})")
- 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(',')})")
+ relations = Array.new
+ if visible_nodes.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 (#{visible_nodes.keys.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
# 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