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

Correctness issue in distance join queries

Log workAgile BoardRank to TopRank to BottomAttach filesAttach ScreenshotBulk Copy AttachmentsBulk Move AttachmentsVotersWatch issueWatchersCreate sub-taskConvert to sub-taskLinkCloneLabelsUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    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

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned Assign to me
            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

              Slack

                Issue deployment