[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