当多边形是轴对齐框“POLYGON((0 0,1 0,1 1,0 1))”时,union_()将不会给出正确的结果,只是空输出。实际上,任何多边形的union_()都不应为空。
但是如果你将多边形绿色从轴对齐框更改为“POLYGON((2 1.3,2.4 1.7,2.8 1.8))”,那么会出现一个有意义的输出(非空)。
这是boost union_()的错误吗?
非常感谢
int main()
{
typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;
polygon green, blue;
boost::geometry::read_wkt(
"POLYGON((0 0,1 0,1 1,0 1))",
green);
boost::geometry::read_wkt(
"POLYGON((2 1.3,2.4 1.7,2.8 1.8))",
blue);
std::deque<polygon> output;
boost::geometry::union_(green, blue, output);
int i = 0;
std::cout << "green && blue:" << std::endl;
BOOST_FOREACH(polygon const& p, output)
{
std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
}
return 0;
}
关于它有一个类似的问题。算法需要一些先决条件。 1)多边形必须是顺时针方向。 2)多边形已经闭合,即最后一个点恰好与第一个点重合。
因此,要更正原始多边形数据中的问题,请调用boost :: geometry :: correct()以使数据符合规则。算法将接受多边形并给出正确的结果。