- if place
- distance = format_distance(place.attributes["approxdistance"].to_i)
- direction = format_direction(place.attributes["direction"].to_i)
- placename = format_name(place.attributes["name"].to_s)
- suffix = t "geocoder.search_osm_namefinder.suffix_place", :distance => distance, :direction => direction, :placename => placename
-
- if place.attributes["rank"].to_i <= 30
- parent = nil
- parentrank = 0
- parentscore = 0
-
- place.elements.each("nearestplaces/named") do |nearest|
- nearestrank = nearest.attributes["rank"].to_i
- nearestscore = nearestrank / nearest.attributes["distance"].to_f
-
- if nearestrank > 30 and
- ( nearestscore > parentscore or
- ( nearestscore == parentscore and nearestrank > parentrank ) )
- parent = nearest
- parentrank = nearestrank
- parentscore = nearestscore
- end
- end
-
- if parent
- parentname = format_name(parent.attributes["name"].to_s)
-
- if place.attributes["info"].to_s == "suburb"
- suffix = t "geocoder.search_osm_namefinder.suffix_suburb", :suffix => suffix, :parentname => parentname
- else
- parentdistance = format_distance(parent.attributes["approxdistance"].to_i)
- parentdirection = format_direction(parent.attributes["direction"].to_i)
- suffix = t "geocoder.search_osm_namefinder.suffix_parent", :suffix => suffix, :parentdistance => parentdistance, :parentdirection => parentdirection, :parentname => parentname
- end
- end
- end
- else
- suffix = ""
- end
-
- @results.push({:lat => lat, :lon => lon, :zoom => zoom,
- :prefix => prefix, :name => name, :suffix => suffix,
- :description => description})
- end
-
- render :action => "results"
- rescue Exception => ex
- @error = "Error contacting gazetteer.openstreetmap.org: #{ex.to_s}"
- render :action => "error"
- end