lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Julian Atkinson (JIRA)" <j...@apache.org>
Subject [jira] Commented: (LUCENE-2475) Incorrect Bounding Box calculation results in the exclusion of valid data locations
Date Sat, 22 May 2010 06:17:17 GMT

    [ https://issues.apache.org/jira/browse/LUCENE-2475?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12870277#action_12870277
] 

Julian Atkinson commented on LUCENE-2475:
-----------------------------------------

I got pen and paper out and worked out  the calculation being done in  CartesianTierPlotter.bestFit().

>>>  double corner = r - Math.sqrt(Math.pow(r, 2) / 2.0d);

I ended up with the same formula and it is definitely expecting the radius of the search circle
as param.

There is therefore no need to divide miles param by 2.

BTW the formula can be simplified to 

//corner is the width/height of the box that fits between the arc of the search circle 
//and a corner of the boundary box containing the search circle
double corner = r - r/Math.sqrt(2);



> Incorrect Bounding Box calculation results in the exclusion of valid data locations
> -----------------------------------------------------------------------------------
>
>                 Key: LUCENE-2475
>                 URL: https://issues.apache.org/jira/browse/LUCENE-2475
>             Project: Lucene - Java
>          Issue Type: Bug
>          Components: contrib/spatial
>    Affects Versions: 2.9.1, 3.0
>            Reporter: Julian Atkinson
>         Attachments: BoundingBoxCalucationIssueTest.java, test.html
>
>
> I have found a scenario where some of my location data is not being returned.  The calculated
distance between my search origin and the data is well within my search radius but the data
is not being returned. 
> I have traced this down to what I think is an error when calculating the boundary box
which is used to determine the Shape for the CartesianShapeFilter in  CartesianPolyFilterBuilder.getBoxShape()
> The boundary box calculated by LLRect.createBox() is incorrect.  The box returned is
a box that fits WITHIN the search circle, where the four corners of the box intersect the
circle line. This creates 4 regions where data points are not included - these are regions
that are in the circle but outside the box.
> What I is required is a boundary box that fully CONTAINS the search circle.  As a side
effect you would end up with 4 regions outside of the circle but inside the box.  This would
potentially return data that are not real hits but these can be filtered out by a more precise
distance comparison.
> I will attach a test class that covers the issue with more details and a proposed fix
- a one liner in LLRect.java
> I would appreciate if someone could verify my findings.  All my data tests pass with
this fix but there is one test case in Lucene 3.0.0 that fails and I can't figure out why.
 TestCartesian.testAntiM().

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org


Mime
View raw message