| Home | Libraries | People | FAQ | More

##### Boost.Range filtered

Boost.Range filtered range adaptor is adapted to Boost.Geometry

###### Description

Boost.Range filtered range adaptor filters a range.

###### Model of

The Boost.Range filtered range adaptor takes over the model of the original geometry, which might be:

- a linestring
- a ring
- a multi_point
- a multi_linestring
- a multi_polygon

###### Header

`#include <boost/geometry/geometries/adapted/boost_range/filtered.hpp>`

The standard header `boost/geometry.hpp` does not include this header.

###### Example

Shows how to use a Boost.Geometry linestring, filtered by Boost.Range adaptor

    #include <iostream>

    #include <boost/geometry.hpp>
    #include <boost/geometry/geometries/linestring.hpp>
    #include <boost/geometry/geometries/point_xy.hpp>
    #include <boost/geometry/geometries/adapted/boost_range/filtered.hpp>

    struct not_two
    {
        template <typename P>
        bool operator()(P const& p) const
        {
            return boost::geometry::get<1>(p) != 2;
        }
    };

    int main()
    {
        using xy = boost::geometry::model::d2::point_xy<int>;
        boost::geometry::model::linestring<xy> line;
        line.push_back(xy(0, 0));
        line.push_back(xy(1, 1));
        line.push_back(xy(2, 2));
        line.push_back(xy(3, 1));
        line.push_back(xy(4, 0));
        line.push_back(xy(5, 1));
        line.push_back(xy(6, 2));
        line.push_back(xy(7, 1));
        line.push_back(xy(8, 0));

        using boost::adaptors::filtered;
        std::cout
            << boost::geometry::length(line) << std::endl
            << boost::geometry::length(line | filtered(not_two())) << std::endl
            << boost::geometry::dsv(line | filtered(not_two())) << std::endl;

        return 0;
    }

Output:

    11.3137
    9.65685
    ((0, 0), (1, 1), (3, 1), (4, 0), (5, 1), (7, 1), (8, 0))