]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/geocoder_controller.rb
Patching better 412 error messages from mis-commit on old api06 branch.
[rails.git] / app / controllers / geocoder_controller.rb
index 66962c7f6bf58d035e4125ec8e7053050e38e66c..18812689b4c2c8318d792993e6366987bdde479a 100644 (file)
@@ -29,7 +29,7 @@ class GeocoderController < ApplicationController
 
       if results_count == 1
         position = results.collect { |s| s[:results] }.compact.flatten[0]
 
       if results_count == 1
         position = results.collect { |s| s[:results] }.compact.flatten[0]
-        page.call "setPosition", position[:lat], position[:lon], position[:zoom]
+        page.call "setPosition", position[:lat].to_f, position[:lon].to_f, position[:zoom].to_i
       else
         page.call "openSidebar"
       end
       else
         page.call "openSidebar"
       end
@@ -102,7 +102,7 @@ private
     response = fetch_xml("http://geocoder.ca/?geoit=XML&postal=#{escape_query(query)}")
 
     # parse the response
     response = fetch_xml("http://geocoder.ca/?geoit=XML&postal=#{escape_query(query)}")
 
     # parse the response
-    unless response.get_elements("geodata/error")
+    if response.get_elements("geodata/error").empty?
       results.push({:lat => response.get_text("geodata/latt").to_s,
                     :lon => response.get_text("geodata/longt").to_s,
                     :zoom => POSTCODE_ZOOM,
       results.push({:lat => response.get_text("geodata/latt").to_s,
                     :lon => response.get_text("geodata/longt").to_s,
                     :zoom => POSTCODE_ZOOM,
@@ -146,17 +146,18 @@ private
         if place.attributes["rank"].to_i <= 30
           parent = nil
           parentrank = 0
         if place.attributes["rank"].to_i <= 30
           parent = nil
           parentrank = 0
-          parentdistance = 0
+          parentscore = 0
 
           place.elements.each("nearestplaces/named") do |nearest|
             nearestrank = nearest.attributes["rank"].to_i
 
           place.elements.each("nearestplaces/named") do |nearest|
             nearestrank = nearest.attributes["rank"].to_i
-            nearestdistance = nearest.attributes["distance"].to_f
+            nearestscore = nearestrank / nearest.attributes["distance"].to_f
 
 
-            if nearestrank > parentrank or
-               ( nearestrank == parentrank and nearestdistance < parentdistance )
+            if nearestrank > 30 and
+               ( nearestscore > parentscore or
+                 ( nearestscore == parentscore and nearestrank > parentrank ) )
               parent = nearest
               parentrank = nearestrank
               parent = nearest
               parentrank = nearestrank
-              parentdistance = nearestdistance
+              parentscore = nearestscore
             end
           end
 
             end
           end
 
@@ -166,7 +167,9 @@ private
             if  place.attributes["info"].to_s == "suburb"
               suffix = "#{suffix}, #{parentname}"
             else
             if  place.attributes["info"].to_s == "suburb"
               suffix = "#{suffix}, #{parentname}"
             else
-              suffix = "#{suffix} (near #{parentname})"
+              parentdistance = format_distance(parent.attributes["approxdistance"].to_i)
+              parentdirection = format_direction(parent.attributes["direction"].to_i)
+              suffix = "#{suffix} (#{parentdistance} #{parentdirection} of #{parentname})"
             end
           end
         end
             end
           end
         end