GEOMESA-3308 Fix DWithin filter to compute distance between points across the antimeridian#3028
GEOMESA-3308 Fix DWithin filter to compute distance between points across the antimeridian#3028adeet1 wants to merge 3 commits intolocationtech:mainfrom
Conversation
…ross the antimeridian * Translate longitude by +/-360 and compare distances
geomesa-filter/src/main/scala/org/locationtech/geomesa/filter/expression/FastDWithin.scala
Outdated
Show resolved
Hide resolved
|
|
||
| calculator.setStartingGeographicPoint(p1.x + 360, p1.y) | ||
| calculator.setDestinationGeographicPoint(p2.x, p2.y) | ||
| val dist2 = calculator.getOrthodromicDistance |
There was a problem hiding this comment.
as another optimization here, we could return early if dist1 <= meters and not calculate dist2. but we also need to calculate dist0, which would be the unmodified point. I'm a little surprised none of the existing unit tests failed with this change :( before changing anything, could you add a test for (0 0) to (1 0) (or something similar) and verify that it fails? possibly the calculator is accounting for the anti-meridian wrapping?
There was a problem hiding this comment.
I added a unit test (db811e3), but it passes, which I'm not sure is the intended behavior.
However, I think the calculator computes the shortest distance between two points on the Earth's surface, so it's likely that it already accounts for the anti-meridian wrapping.
| if (geom == null) { | ||
| false | ||
| } else { | ||
| val op = new DistanceOp(geometry, geom) |
There was a problem hiding this comment.
The variable names geometry and geom are too similar and thus confusing. I think we should change these to something more descriptive.
No description provided.