Martin Andersson created SEDONA-178:
---------------------------------------
Summary: Correctness issue in distance join queries
Key: SEDONA-178
URL: https://issues.apache.org/jira/browse/SEDONA-178
Project: Apache Sedona
Issue Type: Bug
Reporter: Martin Andersson
Hi,
We are seeing erroneous result 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(lintestring), 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
--
This message was sent by Atlassian Jira
(v8.20.10#820010)