Hi Adrià,

Adrià Navarro López wrote On 9-7-2014 17:45:

Adrià Navarro López wrote On 9-7-2014 17:45:

Hi,

I'm currently using the intersection function to get the intersecting points of two linestrings. The relevant code is the following:

BOOST_GEOMETRY_REGISTER_POINT_2D(Vec2f, double, cs::cartesian, x, y);What I would also like to know is in which segment on the linestring the intersection happens (the index of the vector). Is there any way to obtain that information? Or should I try to replace bg::intersection for smaller, segment by segment calculations?

BOOST_GEOMETRY_REGISTER_LINESTRING(std::vector<Vec2f>);

std::vector<Vec2f> output, lineStringA, lineStringB;

boost::geometry::intersection(lineStringA, lineStringB, output);

There can be zero or more intersections. Yes you can use segment by segment calculations but (depending on your inputs) that might hurt performance.

We don't have yet a user-function for this, but there is an internal function which you can use: get_turns.

That will give you this information, and much more. Each intersection (internally we call it turn because used for polygon/intersections/unions) contains two operations, both with segment identifiers, which is the information you asked for.

There is no doc page but one (rather old) exampe, and a unit test, which might help you.

https://github.com/boostorg/geometry/blob/develop/example/05_b_overlay_linestring_polygon_example.cpp

https://github.com/boostorg/geometry/blob/develop/test/algorithms/overlay/get_turns.cpp

Regards, Barend