diff --git a/include/boost/geometry/algorithms/detail/difference/linear_linear.hpp b/include/boost/geometry/algorithms/detail/difference/linear_linear.hpp index d57744ae4..4de076929 100644 --- a/include/boost/geometry/algorithms/detail/difference/linear_linear.hpp +++ b/include/boost/geometry/algorithms/detail/difference/linear_linear.hpp @@ -273,6 +273,44 @@ struct linestring_linestring_linestring }; +//=========================================================================== +//=========================================================================== +//=========================================================================== + + + + + +template +struct linestring_multilinestring_linestring +{ + typedef typename point_type::type PointOut; + typedef overlay::traversal_turn_info turn_info; + + + template + < + typename Linestring, typename MultiLinestring, + typename OutputIterator, typename Strategy + > + static inline OutputIterator apply(Linestring const& linestring, + MultiLinestring const& multilinestring, + OutputIterator oit, + Strategy const& strategy) + { + geometry::model::multi_linestring mls; + + mls.push_back(linestring); + + return + multilinestring_multilinestring_linestring + < + LinestringOut + >::apply(mls, multilinestring, oit, strategy); + } +}; + + }} // namespace detail::difference diff --git a/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp b/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp index ba8ca15c3..f98ffd81a 100644 --- a/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp @@ -531,6 +531,24 @@ struct intersection_insert {}; +template +< + typename LineString, typename MultiLineString, + typename LineStringOut, + bool Reverse1, bool Reverse2, bool ReverseOut +> +struct intersection_insert + < + LineString, MultiLineString, + LineStringOut, + overlay_difference, + Reverse1, Reverse2, ReverseOut, + linestring_tag, multi_linestring_tag, linestring_tag, + false, false, false + > : detail::difference::linestring_multilinestring_linestring +{}; + + template < typename MultiLineString1, typename MultiLineString2,