[geos-devel] [GEOS] #1056: GEOSClipByRect: Incorrect line clipping

GEOS geos-trac at osgeo.org
Fri Oct 16 05:55:06 PDT 2020


#1056: GEOSClipByRect: Incorrect line clipping
------------------------+--------------------------
 Reporter:  Algunenano  |      Owner:  geos-devel@…
     Type:  defect      |     Status:  new
 Priority:  major       |  Milestone:  3.8.2
Component:  Default     |    Version:  3.8.0
 Severity:  Unassigned  |   Keywords:
------------------------+--------------------------
 Comes from Postgis' https://trac.osgeo.org/postgis/ticket/4765

 There are some situations where parts of a line that matches the box
 boundaries are not included in the final intersection.

 Example in GEOS itself:
 {{{
 diff --git a/tests/unit/capi/GEOSClipByRectTest.cpp
 b/tests/unit/capi/GEOSClipByRectTest.cpp
 index e5358436..364c6649 100644
 --- a/tests/unit/capi/GEOSClipByRectTest.cpp
 +++ b/tests/unit/capi/GEOSClipByRectTest.cpp
 @@ -200,5 +200,19 @@ template<> template<> void object::test<13>
      isEqual(geom2_, "POLYGON ((5 5, 5 15, 10 15, 10 10, 15 10, 15 5, 5
 5))");
  }

 +/// Comes from https://trac.osgeo.org/postgis/ticket/4765
 +template<> template<> void object::test<14>
 +()
 +{
 +    const char* wkt = "LINESTRING(0 0, 0 15, 15 15, 1 1)";
 +    geom1_ = GEOSGeomFromWKT(wkt);
 +    geom2_ = GEOSClipByRect(geom1_, 0, 0, 10, 10);
 +    /*
 +     * EXP: MULTILINESTRING((0 0,0 10),(10 10,1 1))
 +     * OBT: LINESTRING (10 10, 1 1)
 +     */
 +    isEqual(geom2_, "MULTILINESTRING((0 0,0 10),(10 10,1 1))");
 +}
 +
  } // namespace tut

 }}}


 Broken in at least GEOS 3.8 and master (I haven't tested it in older
 releases).

 Attaching an image showcasing the issue.

-- 
Ticket URL: <https://trac.osgeo.org/geos/ticket/1056>
GEOS <http://trac.osgeo.org/geos>
GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology Suite (JTS).


More information about the geos-devel mailing list