You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucenenet.apache.org by "Digy (JIRA)" <ji...@apache.org> on 2011/07/06 15:33:16 UTC

[Lucene.Net] [jira] [Commented] (LUCENENET-431) Spatial.Net Cartesian won't find docs in radius in certain cases

    [ https://issues.apache.org/jira/browse/LUCENENET-431?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13060571#comment-13060571 ] 

Digy commented on LUCENENET-431:
--------------------------------

Hi Olle,

{code}
        static double TransformLat(double lat)
        {
            var PI = 3.14159265358979323846;
            return (Math.Atan(Math.Exp((lat * 180 / 20037508.34) / 180 * PI)) / PI * 360 - 90) * 100000;
        }


        static double TransformLon(double lon)
        {
            return (lon * 180 / 20037508.34) * 100000;
        }

....

private double _lat = TransformLat(55.6880508001);
private double _lng = TransformLon(13.5871808352); // This passes: 13.6271808352

....

     private void AddData(IndexWriter writer)
        {
            AddPoint(writer, "Within radius", TransformLat(55.6880508001), TransformLon(13.5717346673));
            AddPoint(writer, "Within radius", TransformLat(55.6821978456), TransformLon(13.6076183965));
            AddPoint(writer, "Within radius", TransformLat(55.673251569), TransformLon(13.5946697607));
            AddPoint(writer, "Close but not in radius", TransformLat(55.8634157297), TransformLon(13.5497731987));
            AddPoint(writer, "Faar away", TransformLat(40.7137578228), TransformLon(-74.0126901936));

            writer.Commit();
            writer.Close();
        }
{code}

When I change your code as above, it seems to work(According to above functions yours 4th point should be 11 miles away).

If this works for all your cases, we can think of a patch for Spatial.Net.
(Don't ask what these two functions do, since I found them somewhere in OpenLayers project :) )
Maybe someone can explain these "projection" issues(if this really is the case).

DIGY



> Spatial.Net Cartesian won't find docs in radius in certain cases
> ----------------------------------------------------------------
>
>                 Key: LUCENENET-431
>                 URL: https://issues.apache.org/jira/browse/LUCENENET-431
>             Project: Lucene.Net
>          Issue Type: Bug
>          Components: Lucene.Net Contrib
>    Affects Versions: Lucene.Net 2.9.4
>         Environment: Windows 7 x64
>            Reporter: Olle Jacobsen
>              Labels: spatialsearch
>
> To replicate change Lucene.Net.Contrib.Spatial.Test.TestCartesian to the following witch should return 3 results.
> Line
> 42: private double _lat = 55.6880508001;
> 43: private double _lng = 13.5871808352; // This passes: 13.6271808352
> 73: AddPoint(writer, "Within radius", 55.6880508001, 13.5717346673);
> 74: AddPoint(writer, "Within radius", 55.6821978456, 13.6076183965);
> 75: AddPoint(writer, "Within radius", 55.673251569, 13.5946697607);
> 76: AddPoint(writer, "Close but not in radius", 55.8634157297, 13.5497731987);
> 77: AddPoint(writer, "Faar away", 40.7137578228, -74.0126901936);
> 130: const double miles = 5.0;
> 156: Console.WriteLine("Distances should be 3 " + distances.Count);
> 157: Console.WriteLine("Results should be 3 " + results);
> 159: Assert.AreEqual(3, distances.Count); // fixed a store of only needed distances
> 160: Assert.AreEqual(3, results);

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Re: [Lucene.Net] [jira] [Commented] (LUCENENET-431) Spatial.Net Cartesian won't find docs in radius in certain cases

Posted by Matt Warren <ma...@gmail.com>.
I've been looking at this with Olle over on the RavenDB mailing list.

Just to add that this patch
https://issues.apache.org/jira/secure/attachment/12420781/LUCENE-1930.patch
solves
the issue also. It's from this issue
https://issues.apache.org/jira/browse/LUCENE-1930

But it's more complicated than the fix you propose. As far as I can tell it
uses a completely different method of projecting locations, but I don't
really know much about how it works other than that.

On 6 July 2011 14:33, Digy (JIRA) <ji...@apache.org> wrote:

>
>    [
> https://issues.apache.org/jira/browse/LUCENENET-431?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13060571#comment-13060571]
>
> Digy commented on LUCENENET-431:
> --------------------------------
>
> Hi Olle,
>
> {code}
>        static double TransformLat(double lat)
>        {
>            var PI = 3.14159265358979323846;
>            return (Math.Atan(Math.Exp((lat * 180 / 20037508.34) / 180 *
> PI)) / PI * 360 - 90) * 100000;
>        }
>
>
>        static double TransformLon(double lon)
>        {
>            return (lon * 180 / 20037508.34) * 100000;
>        }
>
> ....
>
> private double _lat = TransformLat(55.6880508001);
> private double _lng = TransformLon(13.5871808352); // This passes:
> 13.6271808352
>
> ....
>
>     private void AddData(IndexWriter writer)
>        {
>            AddPoint(writer, "Within radius", TransformLat(55.6880508001),
> TransformLon(13.5717346673));
>            AddPoint(writer, "Within radius", TransformLat(55.6821978456),
> TransformLon(13.6076183965));
>            AddPoint(writer, "Within radius", TransformLat(55.673251569),
> TransformLon(13.5946697607));
>            AddPoint(writer, "Close but not in radius",
> TransformLat(55.8634157297), TransformLon(13.5497731987));
>            AddPoint(writer, "Faar away", TransformLat(40.7137578228),
> TransformLon(-74.0126901936));
>
>            writer.Commit();
>            writer.Close();
>        }
> {code}
>
> When I change your code as above, it seems to work(According to above
> functions yours 4th point should be 11 miles away).
>
> If this works for all your cases, we can think of a patch for Spatial.Net.
> (Don't ask what these two functions do, since I found them somewhere in
> OpenLayers project :) )
> Maybe someone can explain these "projection" issues(if this really is the
> case).
>
> DIGY
>
>
>
> > Spatial.Net Cartesian won't find docs in radius in certain cases
> > ----------------------------------------------------------------
> >
> >                 Key: LUCENENET-431
> >                 URL: https://issues.apache.org/jira/browse/LUCENENET-431
> >             Project: Lucene.Net
> >          Issue Type: Bug
> >          Components: Lucene.Net Contrib
> >    Affects Versions: Lucene.Net 2.9.4
> >         Environment: Windows 7 x64
> >            Reporter: Olle Jacobsen
> >              Labels: spatialsearch
> >
> > To replicate change Lucene.Net.Contrib.Spatial.Test.TestCartesian to the
> following witch should return 3 results.
> > Line
> > 42: private double _lat = 55.6880508001;
> > 43: private double _lng = 13.5871808352; // This passes: 13.6271808352
> > 73: AddPoint(writer, "Within radius", 55.6880508001, 13.5717346673);
> > 74: AddPoint(writer, "Within radius", 55.6821978456, 13.6076183965);
> > 75: AddPoint(writer, "Within radius", 55.673251569, 13.5946697607);
> > 76: AddPoint(writer, "Close but not in radius", 55.8634157297,
> 13.5497731987);
> > 77: AddPoint(writer, "Faar away", 40.7137578228, -74.0126901936);
> > 130: const double miles = 5.0;
> > 156: Console.WriteLine("Distances should be 3 " + distances.Count);
> > 157: Console.WriteLine("Results should be 3 " + results);
> > 159: Assert.AreEqual(3, distances.Count); // fixed a store of only needed
> distances
> > 160: Assert.AreEqual(3, results);
>
> --
> This message is automatically generated by JIRA.
> For more information on JIRA, see: http://www.atlassian.com/software/jira
>
>
>