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)

Reply via email to