class Geocoder::Lookup::Photon
def base_query_url(query)
def base_query_url(query) host = configuration[:host] || 'photon.komoot.io' method = query.reverse_geocode? ? 'reverse' : 'api' "#{protocol}://#{host}/#{method}?" end
def name
def name 'Photon' end
def query_url_params(query)
def query_url_params(query) lang = query.language || configuration.language params = { lang: lang, limit: query.options[:limit] } if query.reverse_geocode? params.merge!(query_url_params_reverse(query)) else params.merge!(query_url_params_coordinates(query)) end params.merge!(super) end
def query_url_params_coordinates(query)
def query_url_params_coordinates(query) params = { q: query.sanitized_text } if (bias = query.options[:bias]) params.merge!(lat: bias[:latitude], lon: bias[:longitude], location_bias_scale: bias[:scale]) end if (filter = query_url_params_coordinates_filter(query)) params.merge!(filter) end params end
def query_url_params_coordinates_filter(query)
def query_url_params_coordinates_filter(query) filter = query.options[:filter] return unless filter bbox = filter[:bbox] { bbox: bbox.is_a?(Array) ? bbox.join(',') : bbox, osm_tag: filter[:osm_tag] } end
def query_url_params_reverse(query)
def query_url_params_reverse(query) params = { lat: query.coordinates[0], lon: query.coordinates[1], radius: query.options[:radius] } if (dsort = query.options[:distance_sort]) params[:distance_sort] = dsort ? 'true' : 'false' end if (filter = query_url_params_reverse_filter(query)) params.merge!(filter) end params end
def query_url_params_reverse_filter(query)
def query_url_params_reverse_filter(query) filter = query.options[:filter] return unless filter { query_string_filter: filter[:string] } end
def results(query)
def results(query) return [] unless (doc = fetch_data(query)) return [] unless doc['type'] == 'FeatureCollection' return [] unless doc['features'] || doc['features'].present? doc['features'] end
def supported_protocols
def supported_protocols [:http, :https] end