Hi Travis

Good to know you got it all figured out. I've just added a note in the docs to 
remind people that geo params need to be in radians as well. Hopefully that'll 
stop others hitting the same roadblock as yourself.

Cheers

-- 
Pat

On 31/12/2009, at 5:10 PM, Travis Gere wrote:

> I finally got this working, and wanted to follow up for the sake of anyone 
> reading this particular thread having trouble with a radius search and 
> looking for something else to try.  This may not be applicable to you 
> depending on how your tables are setup, but this is what finally worked for 
> me.  
> 
> I'm storing my lats and longs in decimal(15,10) fields which gives me all the 
> precision I need for geocoding down to the street level and seems to work 
> well with my search.  I was getting strange @geodist range filter results 
> until I formatted the lats and longs that I was passing to my search class as 
> radians like so:
> 
>  @lat = (latitude/180) * Math::PI
>  @lon = (longitude/180) * Math::PI 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> On Wed, Dec 30, 2009 at 7:02 PM, Travis Gere <[email protected]> 
> wrote:
> I figured out my problem with search results below, for some reason @geodist 
> is coming back with distances in the hundreds of miles for lat and longs that 
> should only be a few miles from an anchor point. For instance for a set of 
> lat and longs 1 mile away, I am getting 125244.59375. I believe this is in 
> meters, but still, that would be 77.82 miles.  Has anyone seen this before?  
> Any thoughts?
> 
> Here is my current index code:
> 
>       define_index do
>         # fields
>         indexes bannertitle
>         indexes bannerdescription
>         # attributes
>         has :bannerlatitude 
>         has :bannerlongitude
> 
>         set_property :latitude_attr => 'bannerlatitude'
>         set_property :longitude_attr => 'bannerlongitude'
>       end
> 
>   My database table is using float(10,7) for storage of lats and longs.
> 
> Thanks,
> Travis
> 
> 
> On Wed, Dec 30, 2009 at 2:38 PM, Travis <[email protected]> wrote:
> Hi Pat,  thanks so much for your response!  Adding a range filter on
> @geodist is exactly what I needed and will greatly simplify my code as
> you can tell.  I've hit a bit of a snag though, whenever I introduce
> the :with paramter as a range filter from your example below, I get no
> results.  If I remove it, I am able to search fine and can sort using
> order => '@geodist ASC', but neither :with  => {'@geodist' =>
> 0.0..10_000.0}, or :with  => {'@geodist' => 0.0..16_000.0} will return
> results.
> 
> Here is my index code in the Banner model:
>      define_index do
>        # fields
>        indexes bannertitle, :sortable=>true
>        indexes bannerdescription
>        has 'RADIANS(bannerlatitude)', :as => :bannerlatitude, :type
> => :float
>        has 'RADIANS(bannerlongitude)', :as => :bannerlongitude, :type
> => :float
>        set_property :latitude_attr => 'bannerlatitude'
>        set_property :longitude_attr => 'bannerlongitude'
>        set_property :field_weights => {"bannertitle" => 10,
> "bannerdescription" => 5}
>        end
> 
> And in my Banner controller:
> 
> @banners = Banner.search @terms, :geo => [[email protected],
> @zip.longitude],:with  => {'@geodist' => 0.0..16_000.0},:order =>
> "@geodist ASC"
> 
> I must be missing something, my field types for latitude and longitude
> are already float.  Is there anything else that needs to be setup to
> use a range filter on @geodist?
> 
> Thanks for your help!
> --Travis
> 
> On Dec 30, 1:51 am, Pat Allan <[email protected]> wrote:
> > Hi Travis
> >
> > That's some pretty complicated code there, so maybe I'm jumping ahead a 
> > little too far... but, if you want to limit results to anything within a 10 
> > mile radius, that's easy enough. All you need to do is add a range filter 
> > on @geodist:
> >
> > Banner.search @terms,
> >   :geo  => [[email protected], @zip.longitude],
> >   :with  => {'@geodist' => 0.0..10_000.0},
> >   :order => '@geodist ASC'
> >
> > However, Sphinx uses metric, and so you'll need to convert 10 miles to 
> > metres - roughly 16km, so try the following instead:
> >
> > Banner.search @terms,
> >   :geo  => [[email protected], @zip.longitude],
> >   :with  => {'@geodist' => 0.0..16_000.0},
> >   :order => '@geodist ASC'
> >
> > Hope this helps :)
> >
> > --
> > Pat
> >
> > On 30/12/2009, at 5:25 PM, Travis wrote:
> >
> > > Hi Guys,
> >
> > > I am new to this group and to the Thinking Sphinx rails plugin and
> > > Sphinx search dameon. I am up and running and with Thinking Sphinx in
> > > my application and it's truly amazing!  So here is my question, my
> > > application has many tables that store latitude and longitude
> > > information about each item and will return items based on a radius
> > > search, i.e., items that are with x miles between lat and long
> > > points.  Currently I am doing this both in the models and controllers
> > > (messy, but works) using find_by_sql calls and using sql such as this,
> > > for example this controller call for all banners within 10 miles of a
> > > set of lat and longs.
> >
> > > @rsbanners = Banner.find_by_sql ["SELECT * FROM banners
> > >     WHERE (3958*3.1415926*sqrt(([email protected]}')*
> > > ([email protected]}')
> > >     + cos(bannerlatitude/57.29578)*cos('[email protected]}'/57.29578)*
> > > ([email protected]}')*(bannerlongitude-'#
> > > {[email protected]}'))/180)
> > >     <= 10 AND banneractive = '1'"]
> >
> > > I was able to build my index with lats and longs from the example
> > > documentation and do a basic search against the index for all banners
> > > and sorting by distance.  Thegeofunctionality is fantastic and works
> > > great:
> > > @banners = Banners.search @terms, :geo=> [[email protected],
> > > @zip.longitude],:order => "@geodist DESC
> >
> > > Can anyone give me some advice on how to go about converting my
> > > example find_by_sql statement above to using the Thinking Sphinx
> > > plugin?  Can it be done?
> >
> > > Many thanks for your help!  And a huge thanks to Pat Allen for
> > > creating such a fantastic search platform to work with!
> >
> > > --Travis
> >
> > > --
> >
> > > 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 
> > > athttp://groups.google.com/group/thinking-sphinx?hl=en.
> 
> --
> 
> 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.
> 
> 
> 
> 
> 
> --
> 
> 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.

--

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