Hi I am quite a newbie in Ruby. I want to sort a list of locations by relative distance (shortest to farthest relative to my location) on the fly. For example, let say I am at x and y coordinate, I have other points in the map around me. I want to be able to list the other points in terms of the shortest distance from me to the farthest. I store longitude and latitude information on the database. However, I cannot store the relative distance permanently, as (i) number of points change in real time; and (ii) I don''t have relationship with the other points, which means the many-to-many tables are still empty. Any ideas? -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Apr 16, 2009, at 10:21 PM, Milton Wong wrote:> > Hi I am quite a newbie in Ruby. I want to sort a list of locations by > relative distance (shortest to farthest relative to my location) on > the > fly. For example, let say I am at x and y coordinate, I have other > points in the map around me. I want to be able to list the other > points > in terms of the shortest distance from me to the farthest. I store > longitude and latitude information on the database. However, I cannot > store the relative distance permanently, as (i) number of points > change > in real time; and (ii) I don''t have relationship with the other > points, > which means the many-to-many tables are still empty. > > Any ideas?Google for "earth distance sql"... or trust that the below is right :) This assumes that some_table has columns for latitude and longitude and that you''ve set variables for latitude, longitude and radius (in miles) to search on. SELECT * FROM some_table WHERE (3960 * 2 * ASIN( SQRT( (1 - COS(RADIANS(latitude - #{latitude}))) / 2 + COS(RADIANS(#{latitude})) * COS(RADIANS(latitude)) * (1 - COS(RADIANS(longitude - #{longitude}))) / 2))) <= #{radius} --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Michael Wong wrote:> Hi I am quite a newbie in Ruby. I want to sort a list of locations by > relative distance (shortest to farthest relative to my location) on the > fly.[...] No need to implement this yourself. Use PostgreSQL, PostGIS, and (if necessary) GeoRuby. This will make the task almost trivial. Best, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Philip Hallstrom wrote:> On Apr 16, 2009, at 10:21 PM, Milton Wong wrote: > SELECT * FROM some_table WHERE > (3960 * 2 * ASIN( SQRT( (1 - COS(RADIANS(latitude - #{latitude}))) > / 2 + COS(RADIANS(#{latitude})) > * COS(RADIANS(latitude)) > * (1 - COS(RADIANS(longitude - #{longitude}))) / 2))) <= #{radius}Thanks Phillip, Michael. I tried the formula and it works! -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---