Opened 6 years ago
Closed 4 years ago
#12751 closed Bugs (fixed)
difference algorithm returning invalid geometry
Reported by: | Owned by: | Barend Gehrels | |
---|---|---|---|
Milestone: | Boost 1.67.0 | Component: | geometry |
Version: | Boost 1.66.0 | Severity: | Problem |
Keywords: | difference, multi-polygon, polygon | Cc: |
Description
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<int> polygonA; boost::geometry::read_wkt("MULTIPOLYGON(((1920 1462,3720 1462,3720 3262,1920 3262,1920 1462)))", polygonA); boost::geometry::is_valid(polygonA); // returns true tc::geo::polygon<int> polygonB; boost::geometry::read_wkt("MULTIPOLYGON(((1918 1957,1918 1657,2218 2189,1918 1957)),((3718 1957,3360 2233,3718 1561,3718 1957)),((3360 2233,2818 3253,2218 2189,2818 2653,3360 2233)))", polygonB); boost::geometry::is_valid(polygonB); // returns true tc::geo::polygon<int> polygonC; boost::geometry::difference(polygonA, polygonB, polygonC); // polygonC: 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))) boost::geometry::is_valid(polygonC); // returns true tc::geo::polygon<int> polygonD; boost::geometry::read_wkt("MULTIPOLYGON(((1918 2155,1918 1957,2818 2653,3718 1957,3718 2154,2818 3055,1918 2155)))", polygonD); boost::geometry::is_valid(polygonD); // returns true tc::geo::polygon<int> polygonE; boost::geometry::difference(polygonC, polygonD, polygonE); // polygonE: 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,3360 2234,3360 2233,2818 2653,2218 2189),(3718 1957,3718 1561,3360 2233,3718 1957))) boost::geometry::is_valid(polygonD); // returns false!
The difference of two valid multi-polygons yields an invalid multi-polygon.
Change History (4)
comment:1 by , 6 years ago
Status: | new → assigned |
---|
comment:4 by , 4 years ago
Milestone: | To Be Determined → Boost 1.67.0 |
---|---|
Resolution: | → fixed |
Status: | assigned → closed |
Thanks for verifying!
Note:
See TracTickets
for help on using tickets.
Unfortunately not yet fixed