Passing in lng and lat via URL, integers work but not floats

Using the following gode I am able to get an response when the lng and lat are integers, but not when they are floats.

http://localhost:3000/section/query/43,-90 # works!

http://localhost:3000/section/query/43.005,-90.336 # does not work :frowning:

How do I pass in lat and lng parameters from the url?

Thanks in advance!

- Pete

#section_controller.rb class SectionController < ApplicationController

  def query     lat = params[:lat]     lng = params[:lng]     s = Section.find_by_sql("SELECT twp, rng, sec FROM sections WHERE distance( the_geom,'POINT(# {lng} #{lat})') = 0")     site = s[0]     loc = site.attributes     @twp = loc["twp"]     @rng = loc["rng"]     @sec = loc["sec"]     render :action => 'query'   end

end

You'll should escape the string:

link_to(:action => 'query', :controller => 'section', :lat => url_encode(lat), :lon => url_encode(lon))

However, it seems the only unsafe character you have is the comma. If you split into lat and lon as I did above, all should be fine for reassembly in your controller as:

@whatever = Section.find_by_lat_lon(params[:lat] + ',' params[:lon]) #assuming method exists :slight_smile:

Pete DeVries-2 wrote:

Routing Errors with lat,lon. Integers work but not numbers with decimals. I suspect that something needs to be modified in the routing to deal with decimal points.

Any suggestions! Thanks in advance - Pete

Here is the behavior and code.....

http://localhost:3000/table_points/query/43,-90 <- no decimal points works

renders page with....

Township: 6 Range: 4 Section: 15

http://localhost:3000/table_points/query/43.05,-90.33 <- decimals points create routing error renders page with ...

Routing Error

no route found to match "/table_points/query/43.05,-90.33" with {:method=>:get}

routes.rb   # Install the default route as the lowest priority.   map.connect 'table_points/query/:latitude,:longitude', :controller => 'table_points', :action => 'query'

table_points_controller.rb

  def query     s = Section.find_by_sql("SELECT twp, rng, sec FROM sections WHERE distance( the_geom,'POINT(#{lon} #{lat})') = 0")     site = s[0]     loc = site.attributes     @twp = loc["twp"]     @rng = loc["rng"]     @sec = loc["sec"]     render :action => 'query'   end

Use url_encode to clean up your url. It's probably the comma that's causing you grief.

Pete DeVries-2 wrote:

the periods in URLs issue discussed a couple threads down:

http://skwpspace.com/2007/02/27/rails-12-breaks-url-routing-with-dots/ http://groups.google.com/group/rubyonrails-talk/browse_frm/thread/6e8c2c7c9f5c69a6/#

I tried my code without using decimals by multiplying the longitude and latitudes by 1000 and the dividing them again once they were passed to the controller. This works so it seems the decimal point was the problem.

However using the "requirements" in the routes.rb does not seem to fix the problem. I still have a routing error, below is the error message and my routes.rb

no route found to match "/table_points/query/43.05,-90.89" with {:method=>:get}

routes.rb

  map.connect 'table_points/query/:latitude,:longitude', :controller => 'table_points', :action => 'query', :requirements => { :latitude => /.*/, :longitude => /.*/ }

Any suggestions would be greatly appreciated :slight_smile:

Thanks in Advance,

-Pete