Hi, I apologize if this is slightly off topic. I have not implemented this, but the idea came to me after reading another post about measuring distance in lucene. It may be completely impractical, however it seems it COULD work at least if the area to be indexed could be constrained.
What if you divided the earth up into lets say 100 square blocks. Each block would have sides of length x1 with an area x1^2. You could number those blocks 0 - 99. Then you could divide each of those blocks into 100 blocks with sides of length x2 = x1 / 10 and number these 0 - 99 as well. You could do this until you had blocks with sides of length xn and area xn^2. Each one of these blocks would have four corners with a lat and lon. It would be fairly easy to tell if one block were in another block. It should be fairly easy to tell which set of boxes any lat, lon pair belonged to. It seems then you could specify locations almost like IP addresses: X1.X2.X3...Xn where X1 is the 0-99 number of the first largest set of blocks and X2 is the 0-99 number of the next smaller set of blocks inside the first X1 box and so on. You could search in lucene for objects within a certain proximity with a prefix search: X1.X2.* X1.X2.X3.* Moreover you would know that the longer the path that matches, the closer those objects are (it is fractal in nature). If you needed more granularity you could do a prefix search like this down to the smallest granularity you have and then perform a greatcircle distance calculation on the the results to see if they are close enough. Of course there might be too many squares to cover the whole Earth. You will want to pick a number of boxes which is a power of two so there are a "square" number of squares. I think this enables the fractal nature described above. You would want the corners of the squares to land on predicable lat, lon points. This may be done more easily with some measurement systems than another. Just my $.02... Dennis Watson Sr SW Engineer GUBA.com On Monday 20 November 2006 11:05, spamsucks wrote: > I am successfully able to search for "nearbys" given a longitude and a > latitude. The basic summary of how I do this is that I add 1000 to the > long/lat values and use a RangeFilter in my query. > > In my display results, I display the results ordered by distance from the > original long/lat. What I do is calulate the distance for every document > in my result from the original long/lat and perform a sort of the distance. > > Doing the sort this way (calculating the distances for all results > documents) feels like I am being inefficient and wasteful with my CPU > cycles. In most cases, I am only displaying the closest 10 documents, but > I need to calculate the distance for all documents (potentially 1000) in > order to come up with the 10 closest. > > Has anyone wrestled with these questions before? Is there another > approache that I can take? > > Here is my current working implementation, so you can see what I am > describing. The long/lat is stored in a database that I use to build up my > lucene query/filters > > http://www.visitpa.com/visitpa/visitNearbyActivities.pa?type=dining&name=Co >lor+Me+MineThanks,Phillip > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]