Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/pull/4895'
Browse files Browse the repository at this point in the history
  • Loading branch information
tomhughes committed Jun 25, 2024
2 parents 4c6e9de + 839d203 commit ddc2520
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 27 deletions.
51 changes: 31 additions & 20 deletions app/controllers/geocoder_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ def search
@sources = []

if @params[:lat] && @params[:lon]
@sources.push "latlon"
@sources.push "osm_nominatim_reverse"
@sources.push({ :name => "latlon", :parameters => "" })
@sources.push({ :name => "osm_nominatim_reverse", :parameters => "reverse?format=html&#{nominatim_reverse_url_parameters}" })
elsif @params[:query]
@sources.push "osm_nominatim"
@sources.push({ :name => "osm_nominatim", :parameters => "search?format=html&#{nominatim_url_parameters}" })
end

if @sources.empty?
Expand Down Expand Up @@ -71,21 +71,8 @@ def search_latlon
end

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
viewbox = "&viewbox=#{minlon},#{maxlat},#{maxlon},#{minlat}" if minlon && minlat && maxlon && maxlat

# get objects to excude
exclude = "&exclude_place_ids=#{params[:exclude]}" if params[:exclude]

# ask nominatim
response = fetch_xml("#{Settings.nominatim_url}search?format=xml&extratags=1&q=#{escape_query(query)}#{viewbox}#{exclude}&accept-language=#{http_accept_language.user_preferred_languages.join(',')}")
response = fetch_xml("#{Settings.nominatim_url}search?format=xml&" + nominatim_url_parameters)

# extract the results from the response
results = response.elements["searchresults"]
Expand Down Expand Up @@ -138,15 +125,13 @@ def search_osm_nominatim

def search_osm_nominatim_reverse
# get query parameters
lat = params[:lat]
lon = params[:lon]
zoom = params[:zoom]

# create result array
@results = []

# ask nominatim
response = fetch_xml("#{Settings.nominatim_url}reverse?lat=#{lat}&lon=#{lon}&zoom=#{zoom}&accept-language=#{http_accept_language.user_preferred_languages.join(',')}")
response = fetch_xml("#{Settings.nominatim_url}reverse?" + nominatim_reverse_url_parameters)

# parse the response
response.elements.each("reversegeocode/result") do |result|
Expand All @@ -171,6 +156,32 @@ def search_osm_nominatim_reverse

private

def nominatim_url_parameters
# get query parameters
query = params[:query]
minlon = params[:minlon]
minlat = params[:minlat]
maxlon = params[:maxlon]
maxlat = params[:maxlat]

# get view box
viewbox = "&viewbox=#{minlon},#{maxlat},#{maxlon},#{minlat}" if minlon && minlat && maxlon && maxlat

# get objects to excude
exclude = "&exclude_place_ids=#{params[:exclude]}" if params[:exclude]

"extratags=1&q=#{escape_query(query)}#{viewbox}#{exclude}&accept-language=#{http_accept_language.user_preferred_languages.join(',')}"
end

def nominatim_reverse_url_parameters
# get query parameters
lat = params[:lat]
lon = params[:lon]
zoom = params[:zoom]

"lat=#{lat}&lon=#{lon}&zoom=#{zoom}&accept-language=#{http_accept_language.user_preferred_languages.join(',')}"
end

def fetch_text(url)
response = OSM.http_client.get(URI.parse(url))

Expand Down
6 changes: 3 additions & 3 deletions app/views/geocoder/search.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
<% @sources.each do |source| %>
<h4>
<%= t(".title.results_from_html", :results_link => link_to(t(".title.#{source}"),
t(".title.#{source}_url"))) %>
<%= t(".title.results_from_html", :results_link => link_to(t(".title.#{source[:name]}"),
t(".title.#{source[:name]}_url").to_s + source[:parameters].to_s)) %>
</h4>
<div class="search_results_entry mx-n3" data-href="<%= url_for @params.merge(:action => "search_#{source}") %>">
<div class="search_results_entry mx-n3" data-href="<%= url_for @params.merge(:action => "search_#{source[:name]}") %>">
<div class="text-center loader">
<div class="spinner-border" role="status">
<span class="visually-hidden"><%= t("browse.start_rjs.loading") %></span>
Expand Down
8 changes: 4 additions & 4 deletions test/controllers/geocoder_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ def latlon_check(query, lat, lon)
assert_response :success
assert_template :search
assert_template :layout => "map"
assert_equal %w[latlon osm_nominatim_reverse], assigns(:sources)
assert_equal %w[latlon osm_nominatim_reverse], assigns(:sources).pluck(:name)
assert_nil @controller.params[:query]
assert_in_delta lat, @controller.params[:lat]
assert_in_delta lon, @controller.params[:lon]
Expand All @@ -373,7 +373,7 @@ def latlon_check(query, lat, lon)
assert_response :success
assert_template :search
assert_template :layout => "xhr"
assert_equal %w[latlon osm_nominatim_reverse], assigns(:sources)
assert_equal %w[latlon osm_nominatim_reverse], assigns(:sources).pluck(:name)
assert_nil @controller.params[:query]
assert_in_delta lat, @controller.params[:lat]
assert_in_delta lon, @controller.params[:lon]
Expand All @@ -384,13 +384,13 @@ def search_check(query, sources)
assert_response :success
assert_template :search
assert_template :layout => "map"
assert_equal sources, assigns(:sources)
assert_equal sources, assigns(:sources).pluck(:name)

get search_path(:query => query), :xhr => true
assert_response :success
assert_template :search
assert_template :layout => "xhr"
assert_equal sources, assigns(:sources)
assert_equal sources, assigns(:sources).pluck(:name)
end

def results_check(*results)
Expand Down

0 comments on commit ddc2520

Please sign in to comment.