id summary reporter owner description type status milestone component version severity resolution keywords cc 11676 difference algorithm returning invalid geometry anonymous Barend Gehrels "My ""tc::geo::polygon"" type is actually a '''multi-polygon''', using a polygon type that is based on '''int''', oriented '''counter-clockwise''' and '''open''' (not closed). Please consider the following example: {{{ tc::geo::polygon polygonA; boost::geometry::read_wkt(""MULTIPOLYGON(((1920 1660,1920 1462,3720 1462,3720 3262,1920 3262,1920 1959,2218 2189,1920 1660),(3718 1561,3360 2233,3718 1957,3718 1561),(2818 2653,2218 2189,2818 3253,3360 2233,2818 2653)))"", polygonA); // does not throw boost::geometry::is_valid(polygonA); // returns true tc::geo::polygon polygonB; boost::geometry::read_wkt(""MULTIPOLYGON(((1918 2155,1918 1957,2818 2653,3718 1957,3718 2154,2818 3055,1918 2155)))"", polygonB); // does not throw boost::geometry::is_valid(polygonB); // returns true tc::geo::polygon polygonC; boost::geometry::difference(polygonA, polygonB, polygonC); // does not throw // polygonC: MULTIPOLYGON(((2218 2189,1920 1660,1920 1462,3720 1462,3720 3262,1920 3262,1920 2157,2562 2799,2818 3253,3043 2829,3718 2154,3718 1957,3718 1561,3360 2233,3718 1957,3360 2234,3360 2233,2818 2653,2218 2189))) boost::geometry::is_valid(polygonC); // returns false! }}} The difference of two valid multi-polygons yields an invalid multi-polygon. May be related to Ticket #10661 and Ticket #11674. " Bugs closed Boost 1.67.0 geometry Boost 1.66.0 Problem fixed difference, multi-polygon, polygon