Simplify handling of geocoder URLs
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.
This commit is contained in:
parent
ddc252016a
commit
271384e683
4 changed files with 15 additions and 17 deletions
|
@ -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)
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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" ?>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue