Hi,

There seems to be a bug in boost::geometry::intersection that we regularly encounter. The result of an intersection is sometimes equal to one of the input polygons, when the result should be empty. For example:

typedef boost::geometry::model::d2::point_xy<double> Point;

typedef boost::geometry::model::polygon<Point> Polygon;

Polygon pg1;

Polygon pg2;

boost::geometry::model::multi_polygon<Polygon> result;

boost::geometry::append(pg1, Point(-6.0, 3.2500000000000013));

boost::geometry::append(pg1, Point(-9.0, 3.2500000000000022));

boost::geometry::append(pg1, Point(-9.0, 6.5));

boost::geometry::append(pg1, Point(-6.0, 6.5));

boost::geometry::append(pg1, Point(-6.0, 3.2500000000000013));

boost::geometry::append(pg2, Point(-3.0, 0.0));

boost::geometry::append(pg2, Point(-6.0, 0.0));

boost::geometry::append(pg2, Point(-6.0, 3.2500000000000013));

boost::geometry::append(pg2, Point(-3.0, 3.2500000000000009));

boost::geometry::append(pg2, Point(-3.0, 0.0));

boost::geometry::intersection(pg1, pg2, result);

The problem seems to be with boost::geometry::within. We've previously had problems with within that we resolved by using a different strategy. Changing the strategy of the within calls in the function update_selection_map in select_rings.hpp makes intersection return the correct result for this case.