Provide extra context for namefinder results where the nearest place

is small (a hamlet, village or suburb). Closes #794.
This commit is contained in:
Tom Hughes 2008-04-09 23:43:38 +00:00
parent f8adbf080a
commit 373a3b0577

View file

@ -129,20 +129,51 @@ private
type = named.attributes["info"].to_s.capitalize
name = named.attributes["name"].to_s
description = named.elements["description"].to_s
if name.empty?
prefix = ""
name = type
else
prefix = "#{type} "
end
if place
distance = format_distance(place.attributes["approxdistance"].to_i)
direction = format_direction(place.attributes["direction"].to_i)
placename = place.attributes["name"].to_s
placename = format_name(place.attributes["name"].to_s)
suffix = ", #{distance} #{direction} of #{placename}"
if place.attributes["rank"].to_i <= 30
parent = nil
parentrank = 0
parentdistance = 0
place.elements.each("nearestplaces/named") do |nearest|
nearestrank = nearest.attributes["rank"].to_i
nearestdistance = nearest.attributes["distance"].to_f
if nearestrank > parentrank or
( nearestrank == parentrank and nearestdistance < parentdistance )
parent = nearest
parentrank = nearestrank
parentdistance = nearestdistance
end
end
if parent
parentname = format_name(parent.attributes["name"].to_s)
if place.attributes["info"].to_s == "suburb"
suffix = "#{suffix}, #{parentname}"
else
suffix = "#{suffix} (near #{parentname})"
end
end
end
else
suffix = ""
end
results.push({:lat => lat, :lon => lon, :zoom => zoom,
:prefix => prefix, :name => name, :suffix => suffix,
:description => description})
@ -245,6 +276,10 @@ private
return "west"
end
def format_name(name)
return name.gsub(/( *\[[^\]]*\])*$/, "")
end
def count_results(results)
count = 0