Pass the viewbox to nominatim when possible.

This commit is contained in:
Tom Hughes 2009-11-10 14:37:46 +00:00
parent 7dd06b4f88
commit e19c04c7a7
3 changed files with 31 additions and 4 deletions

View file

@ -218,12 +218,21 @@ class GeocoderController < ApplicationController
def search_osm_nominatim def search_osm_nominatim
# get query parameters # get query parameters
query = params[:query] 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 # create result array
@results = Array.new @results = Array.new
# ask OSM namefinder # ask nominatim
response = fetch_xml("http://nominatim.openstreetmap.org/search?format=xml&q=#{escape_query(query)}") response = fetch_xml("http://nominatim.openstreetmap.org/search?format=xml&q=#{escape_query(query)}#{viewbox}")
# parse the response # parse the response
response.elements.each("searchresults/place") do |place| response.elements.each("searchresults/place") do |place|

View file

@ -4,6 +4,6 @@
<%= image_tag "searching.gif", :class => "search_searching" %> <%= image_tag "searching.gif", :class => "search_searching" %>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
<%= remote_function :update => "search_#{source}", :url => { :action => "search_#{source}", :query => @query } %> <%= remote_function :update => "search_#{source}", :url => { :action => "search_#{source}", :query => @query, :minlat => params[:minlat], :minlon => params[:minlon], :maxlat => params[:maxlat], :maxlon => params[:maxlon] } %>
</script> </script>
<% end %> <% end %>

View file

@ -13,6 +13,17 @@
:with => "'lat=' + position.lat + '&lon=' + position.lon + '&zoom=' + zoom") %> :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] %> <% if params[:query] %>
<%= remote_function(:loading => "startSearch()", <%= remote_function(:loading => "startSearch()",
:url => { :controller => :geocoder, :action => :search, :query => h(params[:query]) }) %> :url => { :controller => :geocoder, :action => :search, :query => h(params[:query]) }) %>
@ -26,11 +37,18 @@
<span class="whereami"><a href="javascript:describeLocation()" title="<%= t 'site.search.where_am_i_title' %>"><%= t 'site.search.where_am_i' %></a></span> <span class="whereami"><a href="javascript:describeLocation()" title="<%= t 'site.search.where_am_i_title' %>"><%= t 'site.search.where_am_i' %></a></span>
<div class="search_form"> <div class="search_form">
<div id="search_field"> <div id="search_field">
<% form_remote_tag(:loading => "startSearch()", <% form_remote_tag(:before => "setSearchViewbox()",
:loading => "startSearch()",
:complete => "endSearch()", :complete => "endSearch()",
:url => { :controller => :geocoder, :action => :search }, :url => { :controller => :geocoder, :action => :search },
:html => { :method => "get", :action => url_for(:action => "index") }) do %> :html => { :method => "get", :action => url_for(:action => "index") }) do %>
<%= text_field_tag :query, h(params[:query]) %> <%= 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') %> <%= submit_tag t('site.search.submit_text') %>
<% end %> <% end %>
</div> </div>