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.
