// Boost.Geometry
// Copyright (c) 2017-2020, Oracle and/or its affiliates.
-
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
// Use, modification and distribution is subject to the Boost Software License,
Point const& point,
Strategy const& strategy)
{
+ auto const s = strategy.relate(multi_point, point);
+
typedef typename boost::range_const_iterator<MultiPoint>::type iterator;
for ( iterator it = boost::begin(multi_point) ; it != boost::end(multi_point) ; ++it )
{
- if (! strategy.apply(*it, point))
+ if (! s.apply(*it, point))
{
return false;
}
// Create envelope of geometry
box2_type box;
- geometry::envelope(linear_or_areal, box, strategy.get_envelope_strategy());
+ geometry::envelope(linear_or_areal, box, strategy);
geometry::detail::expand_by_epsilon(box);
- typedef typename Strategy::disjoint_point_box_strategy_type point_in_box_type;
-
// Test each Point with envelope and then geometry if needed
// If in the exterior, break
bool result = false;
typedef typename boost::range_const_iterator<MultiPoint>::type iterator;
for ( iterator it = boost::begin(multi_point) ; it != boost::end(multi_point) ; ++it )
{
- int in_val = 0;
+ typedef decltype(strategy.covered_by(*it, box)) point_in_box_type;
+ int in_val = 0;
+
// exterior of box and of geometry
if (! point_in_box_type::apply(*it, box)
|| (in_val = point_in_geometry(*it, linear_or_areal, strategy)) < 0)
typedef model::box<point2_type> box2_type;
static const bool is_linear = util::is_linear<LinearOrAreal>::value;
- typename Strategy::envelope_strategy_type const
- envelope_strategy = strategy.get_envelope_strategy();
-
// TODO: box pairs could be constructed on the fly, inside the rtree
// Prepare range of envelopes and ids
box_pair_vector boxes(count2);
for (std::size_t i = 0 ; i < count2 ; ++i)
{
- geometry::envelope(linear_or_areal, boxes[i].first, envelope_strategy);
+ geometry::envelope(linear_or_areal, boxes[i].first, strategy);
geometry::detail::expand_by_epsilon(boxes[i].first);
boxes[i].second = i;
}
// Create R-tree
- typedef strategy::index::services::from_strategy
- <
- Strategy
- > index_strategy_from;
- typedef index::parameters
- <
- index::rstar<4>, typename index_strategy_from::type
- > index_parameters_type;
+ typedef index::parameters<index::rstar<4>, Strategy> index_parameters_type;
index::rtree<box_pair_type, index_parameters_type>
rtree(boxes.begin(), boxes.end(),
- index_parameters_type(index::rstar<4>(), index_strategy_from::get(strategy)));
+ index_parameters_type(index::rstar<4>(), strategy));
// For each point find overlapping envelopes and test corresponding single geometries
// If a point is in the exterior break