Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
Description
Hi,
We are seeing erroneous results for some distance join queries.
Case 1:
The following query gives no output even though the distance between the geometries is 1.
select *
from (select ST_LineFromText('Linestring(1 1, 1 4)') as geom) a
join (select st_point(1.0,5.0) as geom) b
on st_distance(a.geom, b.geom) < 1.4
I think the issue boils down to a misuse of/error in Circle class. DistanceJoinExec.scala:60 will create a Circle from the linestring and a radius of 1.4.
Circle will compute the center point (1 2.5) and radius (1.5) for the linestring. The actual radius used is max(radius(linestring), 1.4). See Circle.java:80
For the query to work the Circle needs a radius 1.4 larger than the linestring. Like this:
circle = new Circle(geom, 0.0);
circle.setRadius(circle.getRadius() + 1.4)
Case 2:
The following query matches the geometries even though the distance is not less than 0.1. Actual distance is 1.
select *
from (select ST_LineFromText('Linestring(1 1, 1 3, 3 3)') as geom) a
join (select st_point(2.0,2.0) as geom) b
on st_distance(a.geom, b.geom) < 0.1
Pseudo code for the join condition:
new Circle(a.geom, 0.1).covers(b.geom)
The circle does cover the point but the linestring is further away from the point than 0.1
Attachments
Issue Links
- links to