Boost logo

Geometry :

Subject: Re: [geometry] R-tree segment query optimization
From: Jeremy Murphy (jeremy.william.murphy_at_[hidden])
Date: 2018-04-24 23:51:13

Hi Adam,

On 24 April 2018 at 10:03, Jeremy Murphy <jeremy.william.murphy_at_[hidden]>
>> If that's the case then this means that your overloads of
>> bg::intersects() are not used by the compiler.
>> Adding new kinds of geometries and implementing algorithms for them is
>> more complex than writing an overload. If you want to go this way I could
>> guide you but in general this shouldn't be needed.
>> With some compilers the order of includes WRT the overloads may be the
>> problem. E.g. try to implement the overloads before the library is included
>> or instead of writing a function template (with typename Box) write a
>> function taking a specific box type. The R-tree uses
>> bg::model::box<bg::model::point<CoordinateType, Dimension,
>> CoordinateSystem>> where the three template attributes of bg::model::point
>> are taken from the Indexable. Or you could take this type from the R-tree
>> (it's rtree::bounds_type).
> OK, I'll try changing the order of header inclusion. Is that a compiler
> defect that order of inclusion can make a difference? I'm currently using
> GCC 6.4.0, but I have GCC 7.3.0 and Clang 6.0.0 installed too.

Hmmm, not sure how to break the dependency there... I mean, the
implementation of my intersects functions depend on the library, so I can't
completely avoid including it first.

I already have the intersects overload for box specialized on
model::box<T>, otherwise those two overloads would be ambiguous, so I have:

namespace boost { namespace geometry {
  template <typename Point, typename HemispherePoint>
  inline bool intersects(Point const& p, model::hemisphere<HemispherePoint>
const& hs)

  template <typename Point, typename HemispherePoint>
  inline bool intersects(model::box<Point> const& b,
model::hemisphere<HemispherePoint> const& hs)

Do I need to overload index::intersects too?


Geometry list run by mateusz at