$include_dir="/home/hyper-archives/geometry/include"; include("$include_dir/msg-header.inc") ?>
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