]> git.openstreetmap.org Git - rails.git/commitdiff
Simplify handling of geocoder URLs
authorTom Hughes <tom@compton.nu>
Tue, 25 Jun 2024 16:57:38 +0000 (17:57 +0100)
committerTom Hughes <tom@compton.nu>
Tue, 25 Jun 2024 16:57:38 +0000 (17:57 +0100)
This avoids having to build them in multiple places and also
ensures we link to what was actually searched rather than some
random string from the locale file.

app/controllers/geocoder_controller.rb
app/views/geocoder/search.html.erb
config/locales/en.yml
test/http/nominatim.yml

index 0419fb3b89e35b93aa80e4d17d6f6553cee77db6..4a593f86a76a23250dd294f0141db07ea8399859 100644 (file)
@@ -13,10 +13,10 @@ class GeocoderController < ApplicationController
     @sources = []
 
     if @params[:lat] && @params[:lon]
-      @sources.push({ :name => "latlon", :parameters => "" })
-      @sources.push({ :name => "osm_nominatim_reverse", :parameters => "reverse?format=html&#{nominatim_reverse_url_parameters}" })
+      @sources.push(:name => "latlon", :url => root_path)
+      @sources.push(:name => "osm_nominatim_reverse", :url => nominatim_reverse_url(:format => "html"))
     elsif @params[:query]
-      @sources.push({ :name => "osm_nominatim", :parameters => "search?format=html&#{nominatim_url_parameters}" })
+      @sources.push(:name => "osm_nominatim", :url => nominatim_url(:format => "html"))
     end
 
     if @sources.empty?
@@ -72,7 +72,7 @@ class GeocoderController < ApplicationController
 
   def search_osm_nominatim
     # ask nominatim
-    response = fetch_xml("#{Settings.nominatim_url}search?format=xml&" + nominatim_url_parameters)
+    response = fetch_xml(nominatim_url(:format => "xml"))
 
     # extract the results from the response
     results = response.elements["searchresults"]
@@ -131,7 +131,7 @@ class GeocoderController < ApplicationController
     @results = []
 
     # ask nominatim
-    response = fetch_xml("#{Settings.nominatim_url}reverse?" + nominatim_reverse_url_parameters)
+    response = fetch_xml(nominatim_reverse_url(:format => "xml"))
 
     # parse the response
     response.elements.each("reversegeocode/result") do |result|
@@ -156,7 +156,7 @@ class GeocoderController < ApplicationController
 
   private
 
-  def nominatim_url_parameters
+  def nominatim_url(format: nil)
     # get query parameters
     query = params[:query]
     minlon = params[:minlon]
@@ -170,16 +170,18 @@ class GeocoderController < ApplicationController
     # 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(',')}"
+    # build url
+    "#{Settings.nominatim_url}search?format=#{format}&extratags=1&q=#{escape_query(query)}#{viewbox}#{exclude}&accept-language=#{http_accept_language.user_preferred_languages.join(',')}"
   end
 
-  def nominatim_reverse_url_parameters
+  def nominatim_reverse_url(format: nil)
     # 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(',')}"
+    # build url
+    "#{Settings.nominatim_url}reverse?format=#{format}&lat=#{lat}&lon=#{lon}&zoom=#{zoom}&accept-language=#{http_accept_language.user_preferred_languages.join(',')}"
   end
 
   def fetch_text(url)
index 53e87b3fd6b68712b68d3bd73051978fd9d59220..f87a4909dd3a4144bdae95a0505fcdc8b5d8817e 100644 (file)
@@ -4,8 +4,7 @@
 
 <% @sources.each do |source| %>
   <h4>
-    <%= t(".title.results_from_html", :results_link => link_to(t(".title.#{source[:name]}"),
-                                                               t(".title.#{source[:name]}_url").to_s + source[:parameters].to_s)) %>
+    <%= t(".title.results_from_html", :results_link => link_to(t(".title.#{source[:name]}"), source[:url].to_s)) %>
   </h4>
   <div class="search_results_entry mx-n3" data-href="<%= url_for @params.merge(:action => "search_#{source[:name]}") %>">
     <div class="text-center loader">
index 8de8a87213aed0d61b69af9b68fdbdc75a7c10ed..4ad1687a6cf991dda1161a66a5434488852a18d5 100644 (file)
@@ -671,11 +671,8 @@ en:
       title:
         results_from_html: 'Results from %{results_link}'
         latlon: Internal
-        latlon_url: https://openstreetmap.org/
         osm_nominatim: OpenStreetMap Nominatim
-        osm_nominatim_url: https://nominatim.openstreetmap.org/
         osm_nominatim_reverse: OpenStreetMap Nominatim
-        osm_nominatim_reverse_url: https://nominatim.openstreetmap.org/
     search_osm_nominatim:
       prefix_format: "%{name}"
       prefix:
index 35070fa7385be272bc1101610ccfd11e6675c2fd..6e7f3c03b3379fb4888667671fcbfa97ac77cff6 100644 (file)
@@ -16,7 +16,7 @@
       <place place_id='109724' osm_type='node' osm_id='17044599' place_rank='30' boundingbox="51.7418469,51.7518469,-0.0156773,-0.0056773" lat='51.7468469' lon='-0.0106773' display_name='Broxbourne, Stafford Drive, Broxbourne, Hertfordshire, East of England, England, United Kingdom' class='railway' type='station' importance='0.111' icon='http://nominatim.openstreetmap.org/images/mapicons/transport_train_station2.p.20.png'><extratags></extratags></place>
     </searchresults>
 
-/reverse?accept-language=&lat=51.7632&lon=-0.0076&zoom=15:
+/reverse?accept-language=&format=xml&lat=51.7632&lon=-0.0076&zoom=15:
   code: 200
   body: |
     <?xml version="1.0" encoding="UTF-8"?>
@@ -33,7 +33,7 @@
       </addressparts>
     </reversegeocode>
 
-/reverse?accept-language=&lat=51.7632&lon=-0.0076&zoom=17:
+/reverse?accept-language=&format=xml&lat=51.7632&lon=-0.0076&zoom=17:
   code: 200
   body: |
     <?xml version="1.0" encoding="UTF-8"?>
@@ -52,7 +52,7 @@
       </addressparts>
     </reversegeocode>
 
-/reverse?accept-language=&lat=13.7709&lon=100.50507&zoom=19:
+/reverse?accept-language=&format=xml&lat=13.7709&lon=100.50507&zoom=19:
   code: 200
   body: |
     <?xml version="1.0" encoding="UTF-8" ?>