]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/geocoder_controller.rb
Don't create sessions for API calls.
[rails.git] / app / controllers / geocoder_controller.rb
index 9349eaca4dfc96154a51f05f30d3c2014062e8e9..69c35e0e3c23e2fc36ba254946d69bb2dbb79f8d 100644 (file)
@@ -9,7 +9,7 @@ class GeocoderController < ApplicationController
 
     if @query.match(/^\d{5}(-\d{4})?$/)
       @results.push search_us_postcode(@query)
-    elsif @query.match(/(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW]) [0-9][ABD-HJLNP-UW-Z]{2})/i)
+    elsif @query.match(/(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\s*[0-9][ABD-HJLNP-UW-Z]{2})/i)
       @results.push search_uk_postcode(@query)
     elsif @query.match(/[A-Z]\d[A-Z]\s*\d[A-Z]\d/i)
       @results.push search_ca_postcode(@query)
@@ -31,7 +31,8 @@ private
     unless response.match(/couldn't find this zip/)
       data = response.split(/\s*,\s+/) # lat,long,town,state,zip
       results.push({:lat => data[0], :lon => data[1], :zoom => 12,
-                    :description => "#{data[2]}, #{data[3]}, #{data[4]}"})
+                    :prefix => "#{data[2]}, #{data[3]}, ",
+                    :name => data[4]})
     end
 
     return { :source => "Geocoder.us", :url => "http://geocoder.us/", :results => results }
@@ -50,7 +51,7 @@ private
       dataline = response.split(/\n/)[1]
       data = dataline.split(/,/) # easting,northing,postcode,lat,long
       results.push({:lat => data[3], :lon => data[4], :zoom => 12,
-                    :description => data[2].gsub(/'/, "")})
+                    :name => data[2].gsub(/'/, "")})
     end
 
     return { :source => "NPEMap / FreeThePostcode", :url => "http://www.npemap.org.uk/", :results => results }
@@ -69,7 +70,7 @@ private
       results.push({:lat => response.get_text("geodata/latt").to_s,
                     :lon => response.get_text("geodata/longt").to_s,
                     :zoom => 12,
-                    :description => query.upcase})
+                    :name => query.upcase})
     end
 
     return { :source => "Geocoder.CA", :url => "http://geocoder.ca/", :results => results }
@@ -91,11 +92,24 @@ private
       place = named.elements["place/named"] || named.elements["nearestplaces/named"]
       type = named.attributes["info"].to_s.capitalize
       name = named.attributes["name"].to_s
-      distance = format_distance(place.attributes["approxdistance"].to_i)
-      direction = format_direction(place.attributes["direction"].to_i)
-      placename = place.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
+        suffix = ", #{distance} #{direction} of #{placename}"
+      else
+        suffix = ""
+      end
       results.push({:lat => lat, :lon => lon, :zoom => zoom,
-                    :description => "#{type} #{name}, #{distance} #{direction} of #{placename}"})
+                    :prefix => prefix, :name => name, :suffix => suffix,
+                    :description => description})
     end
 
     return { :source => "OpenStreetMap Namefinder", :url => "http://www.frankieandshadow.com/osm/", :results => results }
@@ -116,7 +130,8 @@ private
       name = geoname.get_text("name").to_s
       country = geoname.get_text("countryName").to_s
       results.push({:lat => lat, :lon => lon, :zoom => 12,
-                    :description => "#{name}, #{country}"})
+                    :name => name,
+                    :suffix => ", #{country}"})
     end
 
     return { :source => "GeoNames", :url => "http://www.geonames.org/", :results => results }