diff --git a/include/boost/geometry/algorithms/detail/is_simple/linear.hpp b/include/boost/geometry/algorithms/detail/is_simple/linear.hpp index f2efcb309..90810d27e 100644 --- a/include/boost/geometry/algorithms/detail/is_simple/linear.hpp +++ b/include/boost/geometry/algorithms/detail/is_simple/linear.hpp @@ -93,6 +93,19 @@ private: || geometry::equals(point, range::back(linestring)) ); } + template + static inline bool is_closing_point_of(Point const& point, + Linestring const& linestring) + { + BOOST_ASSERT( boost::size(linestring) > 1 ); + return + geometry::equals(range::front(linestring), + range::back(linestring)) + && + geometry::equals(range::front(linestring), point) + ; + } + template static inline bool have_same_boundary_points(Linestring1 const& ls1, Linestring2 const& ls2) @@ -130,6 +143,13 @@ private: range::at(m_multilinestring, turn.operations[1].seg_id.multi_index); + if (turn.operations[0].seg_id.multi_index + == turn.operations[1].seg_id.multi_index) + { + BOOST_ASSERT(is_closing_point_of(turn.point, ls1)); + return true; + } + return is_boundary_point_of(turn.point, ls1) && is_boundary_point_of(turn.point, ls2)