From e19c04c7a7410dd134df9242c221e8a8bb83e3c6 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Tue, 10 Nov 2009 14:37:46 +0000 Subject: [PATCH] Pass the viewbox to nominatim when possible. --- app/controllers/geocoder_controller.rb | 13 +++++++++++-- app/views/geocoder/_search.html.erb | 2 +- app/views/site/_search.html.erb | 20 +++++++++++++++++++- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/app/controllers/geocoder_controller.rb b/app/controllers/geocoder_controller.rb index 9706001cd..fdde82852 100644 --- a/app/controllers/geocoder_controller.rb +++ b/app/controllers/geocoder_controller.rb @@ -218,12 +218,21 @@ class GeocoderController < ApplicationController def search_osm_nominatim # get query parameters query = params[:query] + minlon = params[:minlon] + minlat = params[:minlat] + maxlon = params[:maxlon] + maxlat = params[:maxlat] + + # get view box + if minlon && minlat && maxlon && maxlat + viewbox = "&viewbox=#{minlon},#{maxlat},#{maxlon},#{minlat}" + end # create result array @results = Array.new - # ask OSM namefinder - response = fetch_xml("http://nominatim.openstreetmap.org/search?format=xml&q=#{escape_query(query)}") + # ask nominatim + response = fetch_xml("http://nominatim.openstreetmap.org/search?format=xml&q=#{escape_query(query)}#{viewbox}") # parse the response response.elements.each("searchresults/place") do |place| diff --git a/app/views/geocoder/_search.html.erb b/app/views/geocoder/_search.html.erb index 0d0ed2466..b28feda09 100644 --- a/app/views/geocoder/_search.html.erb +++ b/app/views/geocoder/_search.html.erb @@ -4,6 +4,6 @@ <%= image_tag "searching.gif", :class => "search_searching" %> <% end %> diff --git a/app/views/site/_search.html.erb b/app/views/site/_search.html.erb index dab031c7b..3750a7dc9 100644 --- a/app/views/site/_search.html.erb +++ b/app/views/site/_search.html.erb @@ -13,6 +13,17 @@ :with => "'lat=' + position.lat + '&lon=' + position.lon + '&zoom=' + zoom") %> } + function setSearchViewbox() { + <% if params[:action] == 'index' %> + var extent = getMapExtent(); + + $("minlon").value = extent.left; + $("minlat").value = extent.bottom; + $("maxlon").value = extent.right; + $("maxlat").value = extent.top; + <% end %> + } + <% if params[:query] %> <%= remote_function(:loading => "startSearch()", :url => { :controller => :geocoder, :action => :search, :query => h(params[:query]) }) %> @@ -26,11 +37,18 @@ <%= t 'site.search.where_am_i' %>
- <% form_remote_tag(:loading => "startSearch()", + <% form_remote_tag(:before => "setSearchViewbox()", + :loading => "startSearch()", :complete => "endSearch()", :url => { :controller => :geocoder, :action => :search }, :html => { :method => "get", :action => url_for(:action => "index") }) do %> <%= text_field_tag :query, h(params[:query]) %> + <% if params[:action] == 'index' %> + <%= hidden_field_tag :minlon %> + <%= hidden_field_tag :minlat %> + <%= hidden_field_tag :maxlon %> + <%= hidden_field_tag :maxlat %> + <% end %> <%= submit_tag t('site.search.submit_text') %> <% end %>
-- 2.43.2