You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by Randy Tidd <rc...@tidd.cc> on 2016/06/11 20:05:47 UTC

Problems with Lat / Long searches at minimum and maximum latitude and longitude

Thanks for the help you’ve already given me on getting search with LatLonPoint working, the basics are working great and with great performance.

I did some testing on some edge cases and discovered that indexing and searching for points at the minimum and maximum latitude and longitude are not working as I expected.  I’d appreciate some feedback on this.

Take for example the point (0.0, 180.0) which is in the Pacific ocean at latitude = 0.0 and longitude = 180.0.  If we create a grid of 9 points centered on this location (“tic tac toe” layout) with an offset of 0.1 the coordinates would be:

(0.1, -179.9), (0.0, -179.9), (-0.1, -179.9), (0.1, 180.0), (0.0, 180.0), (-0.1, 180.0), (0.1, 179.9), (0.0, 179.9), (-0.1, 179.9)

The max longitude is 180, so if you move 0.1 degree east the next longitude is actually -179.9 rather than 180.1, it wraps around.

If I then create a square that encompasses these points using an offset of 1.0 (larger than the 0.1 for the indexed points) that polygon would have these endpoints:

(-1.0, 179.0}, (1.0, 179.0), (1.0, -179.0), (-1.0, -179.0), (-1.0, 179.0)

The first and last point are the same so that this is a closed polygon.

When I index these points with LatLonPoint and do a search with LatLonPoint.newPolygonQuery() it does not return any results, which isn’t what I expected. 

However, if I index a grid of points around (0.0, 0.0) and search with this polygon, they are returned by this search, which I don’t believe is correct.  It is as if the search thinks that the point (0.0, 0.0) is between the points (0.0, 179) and (0.0, -179) which I don’t think is correct.  Longitude 0.0 and 180.0 are on opposite sides of the globe.

I see the same behavior with data centered at these points:

(90.0, -180.0)
(90.0, 0.0)
(90.0, 180.0)
(0.0, -180.0)
(0.0, 180.0)
(-90.0, -180.0)
(-90.0, 0.0)
(-90.0, 180.0)

However, using more “normal” points such as (44.4605, -110.8281) this test works fine.

So I’m wondering if there is a problem with the search handling polygons that span the latitude and longitude boundaries, or if maybe I am just not thinking about this right to begin with.  I can post sample code if that would be helpful.  Thanks for any assistance / input.

Randy


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


Re: Problems with Lat / Long searches at minimum and maximum latitude and longitude

Posted by Michael McCandless <lu...@mikemccandless.com>.
Hi Randy,

Robert already replied to your previous email ... maybe you missed it?

Mike McCandless

http://blog.mikemccandless.com

On Sat, Jun 11, 2016 at 4:05 PM, Randy Tidd <rc...@tidd.cc> wrote:

> Thanks for the help you’ve already given me on getting search with
> LatLonPoint working, the basics are working great and with great
> performance.
>
> I did some testing on some edge cases and discovered that indexing and
> searching for points at the minimum and maximum latitude and longitude are
> not working as I expected.  I’d appreciate some feedback on this.
>
> Take for example the point (0.0, 180.0) which is in the Pacific ocean at
> latitude = 0.0 and longitude = 180.0.  If we create a grid of 9 points
> centered on this location (“tic tac toe” layout) with an offset of 0.1 the
> coordinates would be:
>
> (0.1, -179.9), (0.0, -179.9), (-0.1, -179.9), (0.1, 180.0), (0.0, 180.0),
> (-0.1, 180.0), (0.1, 179.9), (0.0, 179.9), (-0.1, 179.9)
>
> The max longitude is 180, so if you move 0.1 degree east the next
> longitude is actually -179.9 rather than 180.1, it wraps around.
>
> If I then create a square that encompasses these points using an offset of
> 1.0 (larger than the 0.1 for the indexed points) that polygon would have
> these endpoints:
>
> (-1.0, 179.0}, (1.0, 179.0), (1.0, -179.0), (-1.0, -179.0), (-1.0, 179.0)
>
> The first and last point are the same so that this is a closed polygon.
>
> When I index these points with LatLonPoint and do a search with
> LatLonPoint.newPolygonQuery() it does not return any results, which isn’t
> what I expected.
>
> However, if I index a grid of points around (0.0, 0.0) and search with
> this polygon, they are returned by this search, which I don’t believe is
> correct.  It is as if the search thinks that the point (0.0, 0.0) is
> between the points (0.0, 179) and (0.0, -179) which I don’t think is
> correct.  Longitude 0.0 and 180.0 are on opposite sides of the globe.
>
> I see the same behavior with data centered at these points:
>
> (90.0, -180.0)
> (90.0, 0.0)
> (90.0, 180.0)
> (0.0, -180.0)
> (0.0, 180.0)
> (-90.0, -180.0)
> (-90.0, 0.0)
> (-90.0, 180.0)
>
> However, using more “normal” points such as (44.4605, -110.8281) this test
> works fine.
>
> So I’m wondering if there is a problem with the search handling polygons
> that span the latitude and longitude boundaries, or if maybe I am just not
> thinking about this right to begin with.  I can post sample code if that
> would be helpful.  Thanks for any assistance / input.
>
> Randy
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>
>