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

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

OK, so ignoring the whole Boundary Box story and looking deeper into the code 
with my test case I noticed that a different bestFit value was being determined 
by the CartesianTierPlotter. 

I get a value of 13 for the test that passes (radius 32miles) and 14 when the 
test fails with a search radius of 31.  This means to me that we end up 
searching in the wrong tier. 

Looking at CartesianTierPlotter.bestFit() I see on the  line below the passed 
in value of miles is divided by 2.

>>> double r = miles / 2.0; 

I'm guessing r is meant to be a radius - but the miles parameter is already a 
radius  - of my search circle.

This has an effect on the calculation of the best fix box width - aka corner in 
the code - and the resulting bestFit or tierId.

If I change this to not divide by 2 - my issue test case passes - as do all my 
other tests.

Again I'd appreciate if someone who knows the code could comment and confirm my 
finding or tell my I'm crazy!

Thx


> 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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to