Add a "More results" link to Nominatim search results.

This commit is contained in:
Tom Hughes 2010-01-06 00:30:29 +00:00
parent aa37cecc1d
commit 4f23e718b4
3 changed files with 30 additions and 3 deletions

View file

@ -228,14 +228,25 @@ class GeocoderController < ApplicationController
viewbox = "&viewbox=#{minlon},#{maxlat},#{maxlon},#{minlat}" viewbox = "&viewbox=#{minlon},#{maxlat},#{maxlon},#{minlat}"
end end
# get objects to excude
if params[:exclude]
exclude = "&exclude_place_ids=#{params[:exclude].join(',')}"
end
# ask nominatim
response = fetch_xml("http://nominatim.openstreetmap.org/search?format=xml&q=#{escape_query(query)}#{viewbox}#{exclude}&accept-language=#{request.user_preferred_languages.join(',')}")
# create result array # create result array
@results = Array.new @results = Array.new
# ask nominatim # create parameter hash for "more results" link
response = fetch_xml("http://nominatim.openstreetmap.org/search?format=xml&q=#{escape_query(query)}#{viewbox}&accept-language=#{request.user_preferred_languages.join(',')}") @more_params = params.reverse_merge({ :exclude => [] })
# extract the results from the response
results = response.elements["searchresults"]
# parse the response # parse the response
response.elements.each("searchresults/place") do |place| results.elements.each("place") do |place|
lat = place.attributes["lat"].to_s lat = place.attributes["lat"].to_s
lon = place.attributes["lon"].to_s lon = place.attributes["lon"].to_s
klass = place.attributes["class"].to_s klass = place.attributes["class"].to_s
@ -248,6 +259,7 @@ class GeocoderController < ApplicationController
:min_lat => min_lat, :max_lat => max_lat, :min_lat => min_lat, :max_lat => max_lat,
:min_lon => min_lon, :max_lon => max_lon, :min_lon => min_lon, :max_lon => max_lon,
:prefix => prefix, :name => name}) :prefix => prefix, :name => name})
@more_params[:exclude].push(place.attributes["place_id"].to_s)
end end
render :action => "results" render :action => "results"

View file

@ -4,4 +4,18 @@
<% @results.each do |result| %> <% @results.each do |result| %>
<p class="search_results_entry"><%= result_to_html(result) %></p> <p class="search_results_entry"><%= result_to_html(result) %></p>
<% end %> <% end %>
<% if @more_params %>
<div id="search_more_<%= @more_params.hash %>">
<p class="search_results_entry"><%=
startSpinner = update_page do |page|
page.replace_html "search_more_#{@more_params.hash}", image_tag("searching.gif", :class => "search_searching")
end
link_to_remote t('geocoder.results.more_results'),
:update => "search_more_#{@more_params.hash}",
:before => startSpinner,
:url => @more_params
%></p>
</div>
<% end %>
<% end %> <% end %>

View file

@ -839,6 +839,7 @@ en:
prefix: "{{distance}} {{direction}} of {{type}}" prefix: "{{distance}} {{direction}} of {{type}}"
results: results:
no_results: "No results found" no_results: "No results found"
more_results: "More results"
distance: distance:
zero: "less than 1km" zero: "less than 1km"
one: "about 1km" one: "about 1km"