|
Geometry : |
Subject: Re: [geometry] Querying index using intersection with custom geometry
From: Adam Wulkiewicz (adam.wulkiewicz_at_[hidden])
Date: 2014-03-31 06:56:15
Hi Michael,
Michael Nett wrote:
> Hi Adam,
>
> I've tried compiling your example code on Boost (version 1.48) and get
> the following compiler errors (sorry for the wall of text). Regarding
> your initial question, the objects we index in the R-Tree are pointers
> (of an abstract base class).
>
AFAIR the R-tree was officially released in Boost 1.54 so my question is
exactly what version of Boost.Geometry are you using?
> Regards,
> Michael
>
> In file included from
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:33:0,
> from
> /usr/local/include/boost/geometry/algorithms/append.hpp:24,
> from
> /usr/local/include/boost/geometry/algorithms/detail/assign_values.hpp:29,
> from
> /usr/local/include/boost/geometry/strategies/cartesian/cart_intersect.hpp:21,
> from
> /usr/local/include/boost/geometry/strategies/intersection.hpp:22,
> from
> /usr/local/include/boost/geometry/strategies/strategies.hpp:25,
> from /usr/local/include/boost/geometry/geometry.hpp:35,
> from
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
> from foo.cc:1:
> /usr/local/include/boost/geometry/algorithms/not_implemented.hpp: In
> instantiation of 'boost::geometry::nyi::not_implemented_error<void,
> void, void>':
> /usr/local/include/boost/geometry/algorithms/not_implemented.hpp:103:8:
> instantiated from 'boost::geometry::not_implemented<void, void, void>'
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:66:8:
> instantiated from 'boost::geometry::dispatch::check<const MyFrustum,
> void, true>'
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:157:8:
> instantiated from 'boost::geometry::concept::detail::checker<const
> MyFrustum>'
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:180:31:
> instantiated from 'void boost::geometry::concept::check() [with
> Geometry = const MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:97:5:
> instantiated from 'bool boost::geometry::intersects(const Geometry1&,
> const Geometry2&) [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
> instantiated from 'static bool
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
> G1&, const G2&) [with G1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
> instantiated from 'static bool
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
> boost::geometry::index::detail::intersects_tag,
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
> instantiated from 'static bool
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
> First, Last>::apply(const Predicate&, const Value&, const Indexable&)
> [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Predicate =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
> instantiated from 'bool
> boost::geometry::index::detail::predicates_check(const Predicates&,
> const Value&, const Indexable&) [with Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u, Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Value = int,
> Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
> instantiated from 'void
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::operator()(const internal_node&) [with Value =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Options =
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
> boost::geometry::index::detail::rtree::insert_reinsert_tag,
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
> boost::geometry::index::detail::rtree::split_default_tag,
> boost::geometry::index::detail::rtree::rstar_tag,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Translator =
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >, Box =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Allocators =
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, OutIter =
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >,
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::internal_node =
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >,
> boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1: instantiated from here
> /usr/local/include/boost/geometry/algorithms/not_implemented.hpp:64:5:
> error: no matching function for call to
> 'assertion_failed(mpl_::failed************
> (boost::geometry::nyi::not_implemented_error<void, void,
> void>::THIS_OPERATION_IS_NOT_OR_NOT_YET_IMPLEMENTED::************)(mpl_::assert_::types<void,
> void, void, mpl_::na>))'
> /usr/local/include/boost/geometry/algorithms/not_implemented.hpp:64:5:
> note: candidate is:
> /usr/local/include/boost/mpl/assert.hpp:82:5: note: template<bool C>
> int mpl_::assertion_failed(typename mpl_::assert<C>::type)
> In file included from
> /usr/local/include/boost/geometry/core/reverse_dispatch.hpp:25:0,
> from
> /usr/local/include/boost/geometry/algorithms/distance.hpp:25,
> from
> /usr/local/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp:16,
> from
> /usr/local/include/boost/geometry/strategies/strategies.hpp:33,
> from /usr/local/include/boost/geometry/geometry.hpp:35,
> from
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
> from foo.cc:1:
> /usr/local/include/boost/geometry/core/geometry_id.hpp: In
> instantiation of 'boost::geometry::core_dispatch::geometry_id<void>':
> /usr/local/include/boost/geometry/core/geometry_id.hpp:87:8:
> instantiated from 'boost::geometry::geometry_id<MyFrustum>'
> /usr/local/include/boost/geometry/core/reverse_dispatch.hpp:57:8:
> instantiated from
> 'boost::geometry::reverse_dispatch<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >, MyFrustum>'
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:344:80:
> instantiated from 'bool boost::geometry::disjoint(const Geometry1&,
> const Geometry2&) [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:
> instantiated from 'bool boost::geometry::intersects(const Geometry1&,
> const Geometry2&) [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
> instantiated from 'static bool
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
> G1&, const G2&) [with G1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
> instantiated from 'static bool
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
> boost::geometry::index::detail::intersects_tag,
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
> instantiated from 'static bool
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
> First, Last>::apply(const Predicate&, const Value&, const Indexable&)
> [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Predicate =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
> instantiated from 'bool
> boost::geometry::index::detail::predicates_check(const Predicates&,
> const Value&, const Indexable&) [with Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u, Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Value = int,
> Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
> instantiated from 'void
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::operator()(const internal_node&) [with Value =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Options =
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
> boost::geometry::index::detail::rtree::insert_reinsert_tag,
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
> boost::geometry::index::detail::rtree::split_default_tag,
> boost::geometry::index::detail::rtree::rstar_tag,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Translator =
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >, Box =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Allocators =
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, OutIter =
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >,
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::internal_node =
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >,
> boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1: instantiated from here
> /usr/local/include/boost/geometry/core/geometry_id.hpp:39:5: error: no
> matching function for call to
> 'assertion_failed(mpl_::failed************
> (boost::geometry::core_dispatch::geometry_id<void>::NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE::************)(mpl_::assert_::types<void,
> mpl_::na, mpl_::na, mpl_::na>))'
> /usr/local/include/boost/geometry/core/geometry_id.hpp:39:5: note:
> candidate is:
> /usr/local/include/boost/mpl/assert.hpp:82:5: note: template<bool C>
> int mpl_::assertion_failed(typename mpl_::assert<C>::type)
> In file included from
> /usr/local/include/boost/geometry/algorithms/distance.hpp:25:0,
> from
> /usr/local/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp:16,
> from
> /usr/local/include/boost/geometry/strategies/strategies.hpp:33,
> from /usr/local/include/boost/geometry/geometry.hpp:35,
> from
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
> from foo.cc:1:
> /usr/local/include/boost/geometry/core/reverse_dispatch.hpp: In
> instantiation of
> 'boost::geometry::reverse_dispatch<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >, MyFrustum>':
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:344:80:
> instantiated from 'bool boost::geometry::disjoint(const Geometry1&,
> const Geometry2&) [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:
> instantiated from 'bool boost::geometry::intersects(const Geometry1&,
> const Geometry2&) [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
> instantiated from 'static bool
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
> G1&, const G2&) [with G1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
> instantiated from 'static bool
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
> boost::geometry::index::detail::intersects_tag,
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
> instantiated from 'static bool
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
> First, Last>::apply(const Predicate&, const Value&, const Indexable&)
> [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Predicate =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
> instantiated from 'bool
> boost::geometry::index::detail::predicates_check(const Predicates&,
> const Value&, const Indexable&) [with Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u, Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Value = int,
> Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
> instantiated from 'void
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::operator()(const internal_node&) [with Value =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Options =
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
> boost::geometry::index::detail::rtree::insert_reinsert_tag,
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
> boost::geometry::index::detail::rtree::split_default_tag,
> boost::geometry::index::detail::rtree::rstar_tag,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Translator =
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >, Box =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Allocators =
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, OutIter =
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >,
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::internal_node =
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >,
> boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1: instantiated from here
> /usr/local/include/boost/geometry/core/reverse_dispatch.hpp:57:8:
> error: no type named 'type' in 'struct
> boost::geometry::geometry_id<MyFrustum>'
> In file included from
> /usr/local/include/boost/geometry/algorithms/num_points.hpp:26:0,
> from
> /usr/local/include/boost/geometry/algorithms/detail/throw_on_empty_input.hpp:15,
> from
> /usr/local/include/boost/geometry/algorithms/distance.hpp:29,
> from
> /usr/local/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp:16,
> from
> /usr/local/include/boost/geometry/strategies/strategies.hpp:33,
> from /usr/local/include/boost/geometry/geometry.hpp:35,
> from
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
> from foo.cc:1:
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp: In function
> 'bool boost::geometry::disjoint(const Geometry1&, const Geometry2&)
> [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]':
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:
> instantiated from 'bool boost::geometry::intersects(const Geometry1&,
> const Geometry2&) [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
> instantiated from 'static bool
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
> G1&, const G2&) [with G1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
> instantiated from 'static bool
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
> boost::geometry::index::detail::intersects_tag,
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
> instantiated from 'static bool
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
> First, Last>::apply(const Predicate&, const Value&, const Indexable&)
> [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Predicate =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
> instantiated from 'bool
> boost::geometry::index::detail::predicates_check(const Predicates&,
> const Value&, const Indexable&) [with Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u, Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Value = int,
> Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
> instantiated from 'void
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::operator()(const internal_node&) [with Value =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Options =
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
> boost::geometry::index::detail::rtree::insert_reinsert_tag,
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
> boost::geometry::index::detail::rtree::split_default_tag,
> boost::geometry::index::detail::rtree::rstar_tag,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Translator =
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >, Box =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Allocators =
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, OutIter =
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >,
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::internal_node =
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >,
> boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1: instantiated from here
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:344:80:
> error: no type named 'type' in 'struct
> boost::geometry::reverse_dispatch<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >, MyFrustum>'
> In file included from
> /usr/local/include/boost/geometry/core/coordinate_system.hpp:20:0,
> from /usr/local/include/boost/geometry/core/cs.hpp:21,
> from /usr/local/include/boost/geometry/geometry.hpp:19,
> from
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
> from foo.cc:1:
> /usr/local/include/boost/geometry/core/point_type.hpp: At global scope:
> /usr/local/include/boost/geometry/core/point_type.hpp: In
> instantiation of 'boost::geometry::traits::point_type<MyFrustum>':
> /usr/local/include/boost/geometry/core/point_type.hpp:66:17:
> instantiated from 'boost::geometry::core_dispatch::point_type<void,
> MyFrustum>'
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:58:8:
> instantiated from 'boost::geometry::core_dispatch::dimension<void,
> MyFrustum>'
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:74:8:
> instantiated from 'boost::geometry::dimension<const MyFrustum>'
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:121:1:
> instantiated from 'void boost::geometry::assert_dimension_equal()
> [with G1 = const
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, G2 = const MyFrustum]'
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:195:5:
> instantiated from 'void
> boost::geometry::concept::check_concepts_and_equal_dimensions() [with
> Geometry1 = const
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = const MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:338:5: [
> skipping 2 instantiation contexts ]
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
> instantiated from 'static bool
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
> G1&, const G2&) [with G1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
> instantiated from 'static bool
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
> boost::geometry::index::detail::intersects_tag,
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
> instantiated from 'static bool
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
> First, Last>::apply(const Predicate&, const Value&, const Indexable&)
> [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Predicate =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
> instantiated from 'bool
> boost::geometry::index::detail::predicates_check(const Predicates&,
> const Value&, const Indexable&) [with Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u, Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Value = int,
> Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
> instantiated from 'void
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::operator()(const internal_node&) [with Value =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Options =
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
> boost::geometry::index::detail::rtree::insert_reinsert_tag,
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
> boost::geometry::index::detail::rtree::split_default_tag,
> boost::geometry::index::detail::rtree::rstar_tag,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Translator =
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >, Box =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Allocators =
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, OutIter =
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >,
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::internal_node =
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >,
> boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1: instantiated from here
> /usr/local/include/boost/geometry/core/point_type.hpp:45:5: error: no
> matching function for call to
> 'assertion_failed(mpl_::failed************
> (boost::geometry::traits::point_type<MyFrustum>::NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE::************)(mpl_::assert_::types<MyFrustum,
> mpl_::na, mpl_::na, mpl_::na>))'
> /usr/local/include/boost/geometry/core/point_type.hpp:45:5: note:
> candidate is:
> /usr/local/include/boost/mpl/assert.hpp:82:5: note: template<bool C>
> int mpl_::assertion_failed(typename mpl_::assert<C>::type)
> /usr/local/include/boost/geometry/core/point_type.hpp: In
> instantiation of 'boost::geometry::core_dispatch::point_type<void,
> MyFrustum>':
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:58:8:
> instantiated from 'boost::geometry::core_dispatch::dimension<void,
> MyFrustum>'
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:74:8:
> instantiated from 'boost::geometry::dimension<const MyFrustum>'
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:121:1:
> instantiated from 'void boost::geometry::assert_dimension_equal()
> [with G1 = const
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, G2 = const MyFrustum]'
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:195:5:
> instantiated from 'void
> boost::geometry::concept::check_concepts_and_equal_dimensions() [with
> Geometry1 = const
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = const MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:338:5:
> instantiated from 'bool boost::geometry::disjoint(const Geometry1&,
> const Geometry2&) [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:
> instantiated from 'bool boost::geometry::intersects(const Geometry1&,
> const Geometry2&) [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
> instantiated from 'static bool
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
> G1&, const G2&) [with G1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
> instantiated from 'static bool
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
> boost::geometry::index::detail::intersects_tag,
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
> instantiated from 'static bool
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
> First, Last>::apply(const Predicate&, const Value&, const Indexable&)
> [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Predicate =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
> instantiated from 'bool
> boost::geometry::index::detail::predicates_check(const Predicates&,
> const Value&, const Indexable&) [with Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u, Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Value = int,
> Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
> instantiated from 'void
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::operator()(const internal_node&) [with Value =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Options =
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
> boost::geometry::index::detail::rtree::insert_reinsert_tag,
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
> boost::geometry::index::detail::rtree::split_default_tag,
> boost::geometry::index::detail::rtree::rstar_tag,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Translator =
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >, Box =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Allocators =
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, OutIter =
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >,
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::internal_node =
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >,
> boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1: instantiated from here
> /usr/local/include/boost/geometry/core/point_type.hpp:66:17: error: no
> type named 'type' in 'struct
> boost::geometry::traits::point_type<MyFrustum>'
> In file included from
> /usr/local/include/boost/geometry/geometries/concepts/point_concept.hpp:22:0,
> from
> /usr/local/include/boost/geometry/arithmetic/arithmetic.hpp:23,
> from /usr/local/include/boost/geometry/geometry.hpp:32,
> from
> /usr/local/include/boost/geometry/index/rtree.hpp:20,
> from foo.cc:1:
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp: In
> function 'void boost::geometry::assert_dimension_equal() [with G1 =
> const boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >, G2 = const MyFrustum]':
> /usr/local/include/boost/geometry/geometries/concepts/check.hpp:195:5:
> instantiated from 'void
> boost::geometry::concept::check_concepts_and_equal_dimensions() [with
> Geometry1 = const
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = const MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/disjoint.hpp:338:5:
> instantiated from 'bool boost::geometry::disjoint(const Geometry1&,
> const Geometry2&) [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/algorithms/intersects.hpp:99:53:
> instantiated from 'bool boost::geometry::intersects(const Geometry1&,
> const Geometry2&) [with Geometry1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:185:43:
> instantiated from 'static bool
> boost::geometry::index::detail::spatial_predicate_call<boost::geometry::index::detail::intersects_tag>::apply(const
> G1&, const G2&) [with G1 =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, G2 = MyFrustum]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:306:75:
> instantiated from 'static bool
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::apply(const
> Pred&, const Value&, const Indexable&) [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Geometry = MyFrustum, Tag =
> boost::geometry::index::detail::intersects_tag,
> boost::geometry::index::detail::predicate_check<boost::geometry::index::detail::spatial_predicate<Geometry,
> Tag, false>, boost::geometry::index::detail::bounds_tag>::Pred =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:617:62:
> instantiated from 'static bool
> boost::geometry::index::detail::predicates_check_impl<Predicate, Tag,
> First, Last>::apply(const Predicate&, const Value&, const Indexable&)
> [with Value = int, Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Predicate =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u]'
> /usr/local/include/boost/geometry/index/detail/predicates.hpp:685:24:
> instantiated from 'bool
> boost::geometry::index::detail::predicates_check(const Predicates&,
> const Value&, const Indexable&) [with Tag =
> boost::geometry::index::detail::bounds_tag, unsigned int First = 0u,
> unsigned int Last = 1u, Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, Value = int,
> Indexable =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >]'
> /usr/local/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp:45:13:
> instantiated from 'void
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::operator()(const internal_node&) [with Value =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Options =
> boost::geometry::index::detail::rtree::options<boost::geometry::index::rstar<8ul>,
> boost::geometry::index::detail::rtree::insert_reinsert_tag,
> boost::geometry::index::detail::rtree::choose_by_overlap_diff_tag,
> boost::geometry::index::detail::rtree::split_default_tag,
> boost::geometry::index::detail::rtree::rstar_tag,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Translator =
> boost::geometry::index::detail::translator<boost::geometry::index::indexable<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::index::equal_to<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >, Box =
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, Allocators =
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> Predicates =
> boost::geometry::index::detail::spatial_predicate<MyFrustum,
> boost::geometry::index::detail::intersects_tag, false>, OutIter =
> std::back_insert_iterator<std::vector<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > > >,
> boost::geometry::index::detail::rtree::visitors::spatial_query<Value,
> Options, Translator, Box, Allocators, Predicates,
> OutIter>::internal_node =
> boost::geometry::index::detail::rtree::dynamic_internal_node<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> >,
> boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::allocators<std::allocator<boost::geometry::model::box<boost::geometry::model::point<float,
> 2ul, boost::geometry::cs::cartesian> > >,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >, boost::geometry::index::rstar<8ul>,
> boost::geometry::model::box<boost::geometry::model::point<float, 2ul,
> boost::geometry::cs::cartesian> >,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>,
> boost::geometry::index::detail::rtree::node_d_mem_static_tag>]'
> foo.cc:46:1: instantiated from here
> /usr/local/include/boost/geometry/core/coordinate_dimension.hpp:121:1:
> error: no type named 'type' in 'struct
> boost::geometry::dimension<const MyFrustum>'
>
>
>
>
> On Fri, Mar 28, 2014 at 10:00 PM, Adam Wulkiewicz
> <adam.wulkiewicz_at_[hidden] <mailto:adam.wulkiewicz_at_[hidden]>> wrote:
>
> Hi Michael,
>
> Michael Nett wrote:
>> Hello,
>>
>> We're considering using Boost.Geometry in one of our projects,
>> but we require the ability to query an index using a super set of
>> the geometric shapes provided by the library (frustum, conical
>> frustums and complex geometry).
>>
>> We have tried implementing template specializations as discussed
>> in this thread
>> (http://stackoverflow.com/questions/19490435/boost-geometry-spatial-query-shapes).
>>
>> namespace boost { namespace geometry {
>> template <typename Box> inline
>> bool intersects(Box const& b, MyFrustum const& f)
>> {
>> // your implementation
>> }
>> }}
>>
>> However, compiling this provides the following error.
>>
>> /usr/include/boost/geometry/core/point_type.hpp:45:5: error: no
>> matching function for call to
>> 'assertion_failed(mpl_::failed************
>> (boost::geometry::traits::point_type<MyGeometry>::NOT_IMPLEMENTED_FOR_THIS_POIN?
>> T_TYPE::************)(mpl_::assert_::types<MyGeometry, mpl_::na,
>> mpl_::na, mpl_::na>))'
>>
>> I tried digging into the source files, but my understanding of
>> the geometry library is too limited to figure out what's going on.
>>
>> Can anyone advise on how to approach the problem?
>>
>
> This assertion fails if you try to get a point_type for the type
> which is not adapted to any of the Boost.Geometry concepts. So you
> must call something like geometry::point_type<MyGeometry>::type or
> pass an object of MyGeometry to one of the existing functions of
> Boost.Geometry which tries to use is as a properly adapted Geometry.
>
> Did you check if your implementation of intersects() work without
> the rtree?
>
> Btw, what's the Value type stored in the rtree?
>
> Below is the fully working (for me) example, maybe it will help
> you to find the cause:
>
> #include <boost/geometry/index/rtree.hpp>
>
> struct MyFrustum
> {
> MyFrustum(int d) : dummy(d) {}
> int dummy;
> };
>
> namespace boost { namespace geometry {
>
> // This will be called for Nodes Bounds and Indexables!
>
> template <typename Box> inline
> bool intersects(Box const& b, MyFrustum const& f)
> {
> std::cout << "checking the intersection with " << f.dummy <<
> std::endl;
> return true;// always intersects
> }
>
> }}
>
> int main()
> {
> namespace bg = boost::geometry;
> namespace bgi = bg::index;
> namespace bgm = bg::model;
> typedef bgm::point<float, 2, bg::cs::cartesian> pt;
> typedef bgm::box<pt> box;
>
> // check your implementation
> bool ok = bg::intersects(box(pt(0, 0), pt(1, 1)), MyFrustum(5));
>
> std::cout << "-------------------" << std::endl;
>
> // now use the rtree
> bgi::rtree<box, bgi::rstar<8> > rt;
> // insert some values
> rt.insert(box(pt(0, 0), pt(1, 1)));
> rt.insert(box(pt(2, 2), pt(3, 3)));
>
> // performa a query
> std::vector<box> vec;
> rt.query(bgi::intersects(MyFrustum(10)), std::back_inserter(vec));
>
> std::cout << vec.size() << std::endl;
> }
>
> The above should print:
>
> checking the intersection with 5
> -------------------
> checking the intersection with 10
> checking the intersection with 10
> 2
>
> Let me know if it helps.
>
> Regards,
> Adam
>
> _______________________________________________
> Geometry mailing list
> Geometry_at_[hidden] <mailto:Geometry_at_[hidden]>
> http://lists.boost.org/mailman/listinfo.cgi/geometry
>
>
>
>
> _______________________________________________
> Geometry mailing list
> Geometry_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/geometry
Geometry list run by mateusz at loskot.net