]> git.openstreetmap.org Git - rails.git/blob - app/controllers/concerns/nominatim_methods.rb
Refactor construction of Nominatim URLs
[rails.git] / app / controllers / concerns / nominatim_methods.rb
1 # frozen_string_literal: true
2
3 module NominatimMethods
4   extend ActiveSupport::Concern
5
6   private
7
8   def nominatim_url(method, parameters)
9     url = URI.join(Settings.nominatim_url, method)
10     url.query = parameters.merge("accept-language" => http_accept_language.user_preferred_languages.join(",")).to_query
11     url
12   end
13
14   def nominatim_query_url(format: nil)
15     # get query parameters
16     query = params[:query]
17     minlon = params[:minlon]
18     minlat = params[:minlat]
19     maxlon = params[:maxlon]
20     maxlat = params[:maxlat]
21
22     # get nominatim parameters
23     parameters = {
24       "format" => format,
25       "extratags" => 1,
26       "q" => query
27     }
28
29     # add any view box
30     parameters["viewbox"] = "#{minlon},#{maxlat},#{maxlon},#{minlat}" if minlon && minlat && maxlon && maxlat
31
32     # add any objects to excude
33     parameters["exclude_place_ids"] = params[:exclude] if params[:exclude]
34
35     # build url
36     nominatim_url("search", parameters)
37   end
38
39   def nominatim_reverse_query_url(format: nil)
40     # get query parameters
41     lat = params[:lat]
42     lon = params[:lon]
43     zoom = params[:zoom]
44
45     # get nominatim parameters
46     parameters = {
47       "format" => format,
48       "lat" => lat,
49       "lon" => lon,
50       "zoom" => zoom
51     }
52
53     # build url
54     nominatim_url("reverse", parameters)
55   end
56 end