Uploaded image for project: 'Apache Sedona'
  1. Apache Sedona
  2. SEDONA-178

Correctness issue in distance join queries

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 1.3.0

    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

          Activity

            People

              Unassigned Unassigned
              umartin Martin Andersson
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 1h 10m
                  1h 10m