- if params[:exclude]
- exclude = "&exclude_place_ids=#{params[:exclude].join(',')}"
- end
-
- # ask nominatim
- response = fetch_xml("#{NOMINATIM_URL}search?format=xml&q=#{escape_query(query)}#{viewbox}#{exclude}&accept-language=#{request.user_preferred_languages.join(',')}")
-
- # create result array
- @results = Array.new
-
- # create parameter hash for "more results" link
- @more_params = params.reverse_merge({ :exclude => [] })
-
- # extract the results from the response
- results = response.elements["searchresults"]
-
- # parse the response
- results.elements.each("place") do |place|
- lat = place.attributes["lat"].to_s
- lon = place.attributes["lon"].to_s
- klass = place.attributes["class"].to_s
- type = place.attributes["type"].to_s
- name = place.attributes["display_name"].to_s
- min_lat,max_lat,min_lon,max_lon = place.attributes["boundingbox"].to_s.split(",")
- prefix_name = t "geocoder.search_osm_nominatim.prefix.#{klass}.#{type}", :default => type.gsub("_", " ").capitalize
- prefix = t "geocoder.search_osm_nominatim.prefix_format", :name => prefix_name
- object_type = place.attributes["osm_type"].to_s
- object_id = place.attributes["osm_id"].to_s
-
- @results.push({:lat => lat, :lon => lon,
- :min_lat => min_lat, :max_lat => max_lat,
- :min_lon => min_lon, :max_lon => max_lon,
- :prefix => prefix, :name => name,
- :type => object_type, :id => object_id})
- @more_params[:exclude].push(place.attributes["place_id"].to_s)
- end
-
- render :action => "results"
-# rescue Exception => ex
-# @error = "Error contacting nominatim.openstreetmap.org: #{ex.to_s}"
-# render :action => "error"
- end
-
- def search_geonames
- # get query parameters
- query = params[:query]
-
- # create result array
- @results = Array.new
-
- # ask geonames.org
- response = fetch_xml("http://api.geonames.org/search?q=#{escape_query(query)}&maxRows=20&username=#{GEONAMES_USERNAME}")
-
- # parse the response
- response.elements.each("geonames/geoname") do |geoname|
- lat = geoname.get_text("lat").to_s
- lon = geoname.get_text("lng").to_s
- name = geoname.get_text("name").to_s
- country = geoname.get_text("countryName").to_s
- @results.push({:lat => lat, :lon => lon,
- :zoom => GEONAMES_ZOOM,
- :name => name,
- :suffix => ", #{country}"})
- end