Restore raw latlon search result
authorJohn Firebaugh <john.firebaugh@gmail.com>
Tue, 15 Oct 2013 15:14:51 +0000 (11:14 -0400)
committerTom Hughes <tom@compton.nu>
Tue, 15 Oct 2013 20:01:14 +0000 (21:01 +0100)
app/controllers/geocoder_controller.rb
config/locales/en.yml
config/routes.rb
test/functional/geocoder_controller_test.rb

index ac6a201..34d8efd 100644 (file)
@@ -13,6 +13,7 @@ class GeocoderController < ApplicationController
 
     @sources = []
     if params[:lat] && params[:lon]
+      @sources.push "latlon"
       @sources.push "osm_nominatim_reverse"
       @sources.push "geonames_reverse"
     elsif params[:query].match(/^\d{5}(-\d{4})?$/)
@@ -30,6 +31,24 @@ class GeocoderController < ApplicationController
     end
   end
 
+  def search_latlon
+    lat = params[:lat].to_f
+    lon = params[:lon].to_f
+    if lat < -90 or lat > 90
+      @error = "Latitude #{lat} out of range"
+      render :action => "error"
+    elsif lon < -180 or lon > 180
+      @error = "Longitude #{lon} out of range"
+      render :action => "error"
+    else
+      @results = [{:lat => lat, :lon => lon,
+                   :zoom => params[:zoom],
+                   :name => "#{lat}, #{lon}"}]
+
+      render :action => "results"
+    end
+  end
+
   def search_us_postcode
     # get query parameters
     query = params[:query]
index a193807..d7411e9 100644 (file)
@@ -462,6 +462,7 @@ en:
   geocoder:
     search:
       title:
+        latlon: 'Results from <a href="http://openstreetmap.org/">Internal</a>'
         us_postcode: 'Results from <a href="http://geocoder.us/">Geocoder.us</a>'
         uk_postcode: 'Results from <a href="http://www.npemap.org.uk/">NPEMap / FreeThe Postcode</a>'
         ca_postcode: 'Results from <a href="http://geocoder.ca/">Geocoder.CA</a>'
index 4fb1428..81548af 100644 (file)
@@ -214,6 +214,7 @@ OpenStreetMap::Application.routes.draw do
 
   # geocoder
   match '/geocoder/search' => 'geocoder#search', :via => :post
+  match '/geocoder/search_latlon' => 'geocoder#search_latlon', :via => :get
   match '/geocoder/search_us_postcode' => 'geocoder#search_us_postcode', :via => :get
   match '/geocoder/search_uk_postcode' => 'geocoder#search_uk_postcode', :via => :get
   match '/geocoder/search_ca_postcode' => 'geocoder#search_ca_postcode', :via => :get
index 51fc202..d8eee97 100644 (file)
@@ -11,6 +11,10 @@ class GeocoderControllerTest < ActionController::TestCase
       { :path => "/geocoder/search", :method => :post },
       { :controller => "geocoder", :action => "search" }
     )
+    assert_routing(
+     { :path => "/geocoder/search_latlon", :method => :get },
+     { :controller => "geocoder", :action => "search_latlon" }
+    )
     assert_routing(
       { :path => "/geocoder/search_us_postcode", :method => :get },
       { :controller => "geocoder", :action => "search_us_postcode" }
@@ -52,7 +56,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta 50.06773, @controller.params[:lat]
       assert_in_delta 14.37742, @controller.params[:lon]
@@ -70,7 +74,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta 50.06773, @controller.params[:lat]
       assert_in_delta 14.37742, @controller.params[:lon]
@@ -88,7 +92,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta 50.06773, @controller.params[:lat]
       assert_in_delta -14.37742, @controller.params[:lon]
@@ -106,7 +110,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta -50.06773, @controller.params[:lat]
       assert_in_delta 14.37742, @controller.params[:lon]
@@ -124,7 +128,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta -50.06773, @controller.params[:lat]
       assert_in_delta -14.37742, @controller.params[:lon]
@@ -145,7 +149,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta 50.06773, @controller.params[:lat]
       assert_in_delta 14.37742, @controller.params[:lon]
@@ -166,7 +170,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta 50.06773, @controller.params[:lat]
       assert_in_delta -14.37742, @controller.params[:lon]
@@ -187,7 +191,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta -50.06773, @controller.params[:lat]
       assert_in_delta 14.37742, @controller.params[:lon]
@@ -208,7 +212,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta -50.06773, @controller.params[:lat]
       assert_in_delta -14.37742, @controller.params[:lon]
@@ -228,7 +232,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta 50.06773, @controller.params[:lat]
       assert_in_delta 14.37742, @controller.params[:lon]
@@ -248,7 +252,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta 50.06773, @controller.params[:lat]
       assert_in_delta -14.37742, @controller.params[:lon]
@@ -268,7 +272,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta -50.06773, @controller.params[:lat]
       assert_in_delta 14.37742, @controller.params[:lon]
@@ -288,7 +292,7 @@ class GeocoderControllerTest < ActionController::TestCase
     ].each do |code|
       post :search, :query => code
       assert_response :success
-      assert_equal ['osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
+      assert_equal ['latlon' ,'osm_nominatim_reverse', 'geonames_reverse'], assigns(:sources)
       assert_nil @controller.params[:query]
       assert_in_delta -50.06773, @controller.params[:lat]
       assert_in_delta -14.37742, @controller.params[:lon]