I had to solve the same problem as yours. I started the thread:
http://groups.google.ca/group/thinking-sphinx/browse_thread/thread/d500092a03abca09/f3359e42fce5ed74?lnk=gst&q=multiple+locations#f3359e42fce5ed74
to get help.

As you can see from Pat Allan's reply, the issue is due to the fact
that Sphinx cannot handle multi-value-attributes with floats.

However, I came up with a solution that has served me well so far.
Take a look at the pastie: http://pastie.org/411745 to get the general
idea behind the solution.

-- Thuva Tharma

On May 16, 2:31 pm, "[email protected]" <[email protected]>
wrote:
> I am using an example here to show the problem.  As far as I can tell,
> either I am doing something wrong, or geodist search doesn't work
> right with multiple locations.
>
> Here is the example:
> User model and a Location model.  A User has many Locations.
> Locations is actually a polymorphic model, as other objects may have
> locations as well - I don't think this affects the results.
>
> USERS TABLE
> | id | login |
> | 1 | User_1 |
> | 2 | User_2 |
> | 3 | User_3 |
>
> LOCATIONS TABLE
> | id | user_id | location | latitude | longitude
> | 1 | 1 | New York, NY | -73.986951 | 40.756054
> | 2 | 2 | Pittsburgh, PA | -80.001933 | 40.438423
> | 3 | 3 | Los Angeles, CA | -118.243425 | 34.052187
> | 3 | 3 | Philadelphia, PA | -75.163808 | 39.951639
>
> In the User model...
>   define_index do
>     indexes login
>     has 'RADIANS(locations.latitude)', :as => :latitude,  :type
> => :float
>     has 'RADIANS(locations.longitude)', :as => :longitude,  :type
> => :float
>     set_property :latitude_attr   => "latitude"
>     set_property :longitude_attr  => "longitude"
>     set_property :delta => true
>   end
>
> Here is a search to find users closest to New York, NY.
>
> The search query:
> results=User.search :geo => [-73.986951 * Math::PI / 180, 40.756054 *
> Math::PI / 180], :order => "@geodist asc"
>
> Parsing through results..
>
> results.each_with_geodist do |result, distance|
> puts result.login + " is " + (distance / 1609.344).to_i.to_s + " miles
> away from New York, NY"
> end
>
> Here is the output:
> User_1 is 0 miles away from New York, NY
> User_2 is 416 miles away from New York, NY
> User_3 is 3058 miles away from New York, NY
>
> The results seem to consider only the first location record of each
> user.  User_3 is actually closer to New York than User_2 because of
> the Philadelphia location, but this location is not reflected in the
> results.
>
> Any idea what I am doing wrong here?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/thinking-sphinx?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to