- 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
+ lat = place.attributes["lat"]
+ lon = place.attributes["lon"]
+ klass = place.attributes["class"]
+ type = place.attributes["type"]
+ name = place.attributes["display_name"]
+ min_lat, max_lat, min_lon, max_lon = place.attributes["boundingbox"].split(",")
+ prefix_name = if type.empty?
+ ""
+ else
+ t "geocoder.search_osm_nominatim.prefix.#{klass}.#{type}", :default => type.tr("_", " ").capitalize
+ end
+ if klass == "boundary" && type == "administrative"
+ rank = (place.attributes["place_rank"].to_i + 1) / 2
+ prefix_name = t "geocoder.search_osm_nominatim.admin_levels.level#{rank}", :default => prefix_name
+ place.elements["extratags"].elements.each("tag") do |extratag|
+ if extratag.attributes["key"] == "place"
+ prefix_name = t "geocoder.search_osm_nominatim.prefix.place.#{extratag.attributes['value']}", :default => prefix_name
+ end
+ end
+ end