geometry
geometry copied to clipboard
Negative buffer on MultiPolygon loses precision in area calculation
Using Boost: 1.84 C++ 17
I am attempting to go from a Point to a Polygon using a positive buffer value and then using the resulting Polygon to generate a smaller Polygon with a negative buffer. However, the resulting smaller polygon has a noticeable area difference than what I'd expect when calculating the area by hand. Here is the example I am running:
Steps:
- Point -> Buffer with a value of 10 -> produces Polygon A
- Polygon A -> Buffer with a value of -3 -> Produces Polygon B
Very accurate:
Expected Area for Step 1: 312.56671980047457
Actual Area for Step 1: 312.566719800474857038
Not so accurate:
Expected Area for Step 2: 153.93022477684056
Actual Area for Step 2: 153.897440054815035637
Although the area difference doesn't seem that different in Step 2, you have to realize that is mainly the result of the high pointsPerCircle value. If I lower that to say 36 instead, we start seeing a difference in a meter or more in the output.
Buffer Code:
int pointsPerCircle = 360;
boost::geometry::strategy::buffer::distance_symmetric<double> distanceStrategy(buffer);
boost::geometry::strategy::buffer::side_straight sideStrategy;
boost::geometry::strategy::buffer::join_round joinStrategy(pointsPerCircle);
boost::geometry::strategy::buffer::end_round endStrategyRound(pointsPerCircle);
boost::geometry::strategy::buffer::point_circle circleStrategy(pointsPerCircle);
MultiPolygonType geometry;
MultiPolygonType result;
boost::geometry::buffer(geometry, result, distanceStrategy, sideStrategy, joinStrategy, endStrategyRound, circleStrategy);
Area code:
long double area = boost::geometry::area(result);
Is the expected behavior for negative buffers, or am I doing something wrong?