Support covered_by(multi_point, box).

This commit is contained in:
Vissarion Fisikopoulos 2022-07-27 17:08:45 +03:00
parent 8472f93658
commit b4082158b7
3 changed files with 35 additions and 1 deletions

View File

@ -74,6 +74,23 @@ struct covered_by<Point, Box, point_tag, box_tag>
}
};
template <typename MultiPoint, typename Box>
struct covered_by<MultiPoint, Box, multi_point_tag, box_tag>
{
template <typename Strategy>
static inline bool apply(MultiPoint const& mpoint, Box const& box, Strategy const& strategy)
{
for (auto point : mpoint)
{
if (! strategy.covered_by(point, box).apply(point, box))
{
return false;
}
}
return true;
}
};
template <typename Box1, typename Box2>
struct covered_by<Box1, Box2, box_tag, box_tag>
{

View File

@ -119,6 +119,10 @@ void test_all()
test_geometry<P, box_type>("POINT(1 0)", "BOX(0 0,2 2)", true);
test_geometry<P, box_type>("POINT(3 3)", "BOX(0 0,2 2)", false);
test_geometry<mpt, box_type>("MULTIPOINT(1 1, 2 1)", "BOX(0 0,3 3)", true);
test_geometry<mpt, box_type>("MULTIPOINT(0 0, 1 1)", "BOX(0 0,2 2)", true);
test_geometry<mpt, box_type>("MULTIPOINT(0 0, 3 4)", "BOX(0 0,2 2)", false);
test_geometry<box_type, box_type>("BOX(1 1,2 2)", "BOX(0 0,3 3)", true);
test_geometry<box_type, box_type>("BOX(0 0,3 3)", "BOX(1 1,2 2)", false);
test_geometry<box_type, box_type>("BOX(0 0,2 2)", "BOX(0 0,3 3)", true);

View File

@ -1,6 +1,8 @@
// Boost.Geometry
// Copyright (c) 2016-2021 Oracle and/or its affiliates.
// Copyright (c) 2016-2022 Oracle and/or its affiliates.
// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
// Use, modification and distribution is subject to the Boost Software License,
@ -44,6 +46,16 @@ void test_point_box()
test_geometry<P, box_t>("POINT(-177.872408 1)", "BOX(179.08882 0, 182.127592 2)", true);
}
template <typename P>
void test_multi_point_box()
{
typedef bg::model::box<P> box_t;
typedef bg::model::multi_point<P> mp_t;
test_geometry<mp_t, box_t>("MULTIPOINT(0 0,1 1)", "BOX(0 0, 1 1)", true);
test_geometry<mp_t, box_t>("MULTIPOINT(1 1,3 3)", "BOX(0 0, 2 2)", false);
}
template <typename P>
void test_box_box()
{
@ -113,6 +125,7 @@ template <typename P>
void test_cs()
{
test_point_box<P>();
test_multi_point_box<P>();
test_box_box<P>();
test_point_polygon<P>();
}