Boost logo

Geometry :

Subject: [ggl] Understanding get_turns for linestring/polygon overlay
From: Barend Gehrels (barend)
Date: 2011-04-15 16:17:28


Hi John,

> Maybe I am a total idiot, but I have the hardest time debugging my own problems with Boost::Geometry. I was able to create the envelope and extend it to a box with a buffer. I also was able to create a linestring that I am sure extends beyond the extent of the box. Now I am trying to get the turn points for the intersection of the linestring and the box. Previously, I was able to do the following with a linestring and a polygon_2d
> typedef boost::geometry::detail::overlay::turn_info<point_2d> turn_info;
> std::vector<turn_info> turns;
> boost::geometry::detail::get_turns::no_interrupt_policy policy;
> boost::geometry::get_turns<false, false, boost::geometry::detail::overlay::assign_null_policy>(splitLine, bufferBox, turns, policy);
>
> However, this fails with a box_2d. I'm assuming that the box_2d is somehow not really a polygon_2d, but can't figure out how to make it a polygon. I know I could probably iterate through all the points of the box and add it to a polygon, but is there a better way?

Yes, a box_2d is not really a polygon_2d but you can convert it to one.
Which branch of Boost.Geometry are you using? If 0.9.0, you can use
boost::geometry::convert to convert the box into a polygon.

Indeed the get_turns fails in case of a linestring and a box, and a
polygon succeeds. In a future version the box will be supported as well
in this algorithm.

Regards, Barend


Geometry list run by mateusz at loskot.net