+ return POTLATCH_PRESETS+[localised,help]
+ end
+
+ def getlocalized(lang)
+ # What we end up actually using. Reported in Potlatch's created_by=* string
+ loaded_lang = 'en'
+
+ # Load English defaults
+ en = YAML::load(File.open("#{Rails.root}/config/potlatch/locales/en.yml"))["en"]
+
+ if lang == 'en'
+ return [loaded_lang, en]
+ else
+ # Use English as a fallback
+ begin
+ other = YAML::load(File.open("#{Rails.root}/config/potlatch/locales/#{lang}.yml"))[lang]
+ loaded_lang = lang
+ rescue
+ other = en
+ end
+
+ # We have to return a flat list and some of the keys won't be
+ # translated (probably)
+ return [loaded_lang, en.merge(other)]
+ end
+ end
+
+ ##
+ # Find all the ways, POI nodes (i.e. not part of ways), and relations
+ # in a given bounding box. Nodes are returned in full; ways and relations
+ # are IDs only.
+ #
+ # return is of the form:
+ # [success_code, success_message,
+ # [[way_id, way_version], ...],
+ # [[node_id, lat, lon, [tags, ...], node_version], ...],
+ # [[rel_id, rel_version], ...]]
+ # where the ways are any visible ways which refer to any visible
+ # nodes in the bbox, nodes are any visible nodes in the bbox but not
+ # used in any way, rel is any relation which refers to either a way
+ # or node that we're returning.
+ def whichways(xmin, ymin, xmax, ymax) #:doc:
+ amf_handle_error_with_timeout("'whichways'",nil,nil) do
+ enlarge = [(xmax-xmin)/8,0.01].min
+ xmin -= enlarge; ymin -= enlarge
+ xmax += enlarge; ymax += enlarge
+
+ # check boundary is sane and area within defined
+ # see /config/application.yml
+ check_boundaries(xmin, ymin, xmax, ymax)
+
+ if POTLATCH_USE_SQL then
+ ways = sql_find_ways_in_area(xmin, ymin, xmax, ymax)
+ points = sql_find_pois_in_area(xmin, ymin, xmax, ymax)
+ relations = sql_find_relations_in_area_and_ways(xmin, ymin, xmax, ymax, ways.collect {|x| x[0]})
+ else
+ # find the way ids in an area
+ nodes_in_area = Node.bbox(ymin, xmin, ymax, xmax).visible.includes(:ways)
+ ways = nodes_in_area.inject([]) { |sum, node|
+ visible_ways = node.ways.select { |w| w.visible? }
+ sum + visible_ways.collect { |w| [w.id,w.version] }
+ }.uniq
+ ways.delete([])
+
+ # find the node ids in an area that aren't part of ways
+ nodes_not_used_in_area = nodes_in_area.select { |node| node.ways.empty? }
+ points = nodes_not_used_in_area.collect { |n| [n.id, n.lon, n.lat, n.tags, n.version] }.uniq
+
+ # find the relations used by those nodes and ways
+ relations = Relation.nodes(nodes_in_area.collect { |n| n.id }).visible +
+ Relation.ways(ways.collect { |w| w[0] }).visible
+ relations = relations.collect { |relation| [relation.id,relation.version] }.uniq
+ end
+
+ [0, '', ways, points, relations]
+ end