Boost logo

Geometry :

Subject: Re: [geometry] Know the segment where two Linestrings intersect
From: Barend Gehrels (barend_at_[hidden])
Date: 2014-07-10 17:56:33


Hi Adrià,

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);
> BOOST_GEOMETRY_REGISTER_LINESTRING(std::vector<Vec2f>);
> std::vector<Vec2f> output, lineStringA, lineStringB;
> boost::geometry::intersection(lineStringA, lineStringB, output);
>
> 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?

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



Geometry list run by mateusz at loskot.net