From fb32eec6e3ce22ce57d584f18a6155de208da569 Mon Sep 17 00:00:00 2001 From: Dan Baston Date: Tue, 13 Jan 2026 09:26:25 -0500 Subject: [PATCH] OverlayEdgeRing: Preserve M values when closing ring Resolves https://github.com/libgeos/geos/issues/1365 --- src/operation/overlayng/OverlayEdgeRing.cpp | 2 +- tests/unit/capi/GEOSGeom_setPrecisionTest.cpp | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/operation/overlayng/OverlayEdgeRing.cpp b/src/operation/overlayng/OverlayEdgeRing.cpp index b9ac015185..1587f9e0c7 100644 --- a/src/operation/overlayng/OverlayEdgeRing.cpp +++ b/src/operation/overlayng/OverlayEdgeRing.cpp @@ -128,7 +128,7 @@ void OverlayEdgeRing::closeRing(CoordinateSequence& pts) { if(pts.size() > 0) { - pts.add(pts.getAt(0), false); + pts.closeRing(false); } } diff --git a/tests/unit/capi/GEOSGeom_setPrecisionTest.cpp b/tests/unit/capi/GEOSGeom_setPrecisionTest.cpp index 4640b19e7e..4c604a1830 100644 --- a/tests/unit/capi/GEOSGeom_setPrecisionTest.cpp +++ b/tests/unit/capi/GEOSGeom_setPrecisionTest.cpp @@ -326,5 +326,20 @@ void object::test<23>() checkPrecision(wkt, 100000, "LINESTRING ( 700000 200000, 700000 1400000)"); } +template<> +template<> +void object::test<24>() +{ + // https://github.com/libgeos/geos/issues/1365{ + set_test_name("M value retained on last point"); + + input_ = fromWKT("POLYGON ZM ((0 0 0 0, 0 1 1 1, 1 1 2 3, 1 0 4 5, 0 0 6 7))"); + expected_ = fromWKT("POLYGON ZM ((0 1 1 1, 1 1 2 3, 1 0 4 5, 0 0 6 7, 0 1 1 1))"); + + result_ = GEOSGeom_setPrecision(input_, 0.1, 0); + + ensure(GEOSEqualsIdentical(result_, expected_)); +} + } // namespace tut