Boost logo

Geometry :

Subject: [geometry] boost::geometry::equals and the ring model
From: Alexandre Pretyman (alexandre.pretyman_at_[hidden])
Date: 2015-04-02 00:02:17


Hello list!

I am having trouble using the equals method on a ring model, maybe I missed
something in the documentation. Can you guys give me some directions on how
can I fix the error below?

I have the following code (also attached):

using point = bg::model::point<double, 2, bg::cs::geographic<bg::degree>>;
using ring = bg::model::ring<point, true, true>;
ring r1;
r1.push_back(bg::make<point>(0, 0));
r1.push_back(bg::make<point>(0, 1));
r1.push_back(bg::make<point>(1, 1));
r1.push_back(bg::make<point>(1, 0));
r1.push_back(bg::make<point>(0, 0));
 ring r2;
r2.push_back(bg::make<point>(0, 0));
r2.push_back(bg::make<point>(0, 1));
r2.push_back(bg::make<point>(1, 1));
r2.push_back(bg::make<point>(1, 0));
r2.push_back(bg::make<point>(0, 0));
 // equals with ring doesn't work ;(
std::cout << "ring equals:" << bg::equals(r1, r2) << std::endl;

And it fails with the following message (full log also attached):

n file included from /usr/include/boost/mpl/aux_/na_assert.hpp:23:0,
                 from /usr/include/boost/mpl/arg.hpp:25,
                 from /usr/include/boost/mpl/placeholders.hpp:24,
                 from /usr/include/boost/mpl/apply.hpp:24,
                 from /usr/include/boost/mpl/for_each.hpp:19,
                 from /usr/include/boost/test/unit_test_suite_impl.hpp:29,
                 from /usr/include/boost/test/unit_test_suite.hpp:19,
                 from /usr/include/boost/test/unit_test.hpp:20,
                 from /unit-tests/geometry-equals/cxx/geometry-equals.cxx:3:
/usr/include/boost/geometry/strategies/area.hpp: In instantiation of
‘struct
boost::geometry::strategy::area::services::default_strategy<boost::geometry::geographic_tag,
boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> > >’:
/usr/include/boost/geometry/strategies/default_area_result.hpp:42:17:
required from ‘struct
boost::geometry::default_area_result<boost::geometry::model::ring<boost::geometry::model::point<double,
2ul, boost::geometry::cs::geographic<boost::geometry::degree> >, true,
true> >’
/usr/include/boost/geometry/algorithms/area.hpp:266:53: required by
substitution of ‘template<class Geometry> typename
boost::geometry::default_area_result<Geometry>::type
boost::geometry::area(const Geometry&) [with Geometry =
boost::geometry::model::ring<boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> >, true, true>]’
/usr/include/boost/geometry/algorithms/equals.hpp:122:41: required from
‘static bool boost::geometry::detail::equals::area_check::apply(const
Geometry1&, const Geometry2&) [with Geometry1 =
boost::geometry::model::ring<boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> >, true, true>;
Geometry2 =
boost::geometry::model::ring<boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> >, true, true>]’
/usr/include/boost/geometry/algorithms/equals.hpp:146:55: required from
‘static bool
boost::geometry::detail::equals::equals_by_collection<TrivialCheck>::apply(const
Geometry1&, const Geometry2&) [with Geometry1 =
boost::geometry::model::ring<boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> >, true, true>;
Geometry2 =
boost::geometry::model::ring<boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> >, true, true>;
TrivialCheck = boost::geometry::detail::equals::area_check]’
/usr/include/boost/geometry/algorithms/equals.hpp:344:52: required from
‘static bool boost::geometry::resolve_variant::equals<Geometry1,
Geometry2>::apply(const Geometry1&, const Geometry2&) [with Geometry1 =
boost::geometry::model::ring<boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> >, true, true>;
Geometry2 =
boost::geometry::model::ring<boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> >, true, true>]’
/usr/include/boost/geometry/algorithms/equals.hpp:460:55: required from
‘bool boost::geometry::equals(const Geometry1&, const Geometry2&) [with
Geometry1 =
boost::geometry::model::ring<boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> >, true, true>;
Geometry2 =
boost::geometry::model::ring<boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> >, true, true>]’
/unit-tests/geometry-equals/cxx/geometry-equals.cxx:44:51: required from
here
/usr/include/boost/geometry/strategies/area.hpp:37:5: error: no matching
function for call to ‘assertion_failed(mpl_::failed************
(boost::geometry::strategy::area::services::default_strategy<boost::geometry::geographic_tag,
boost::geometry::model::point<double, 2ul,
boost::geometry::cs::geographic<boost::geometry::degree> >
>::NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE::************)(mpl_::assert_::types<boost::geometry::model::point<double,
2ul, boost::geometry::cs::geographic<boost::geometry::degree> >, mpl_::na,
mpl_::na, mpl_::na>))’
     BOOST_MPL_ASSERT_MSG

Thanks for any insight!

-- 
Alexandre Pretyman






Geometry list run by mateusz at loskot.net