Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
PrevUpHomeNext

intersection

Calculate the intersection of two geometries.

Description

The free function intersection calculates the spatial set theoretic intersection of two geometries.

Synopsis

template<typename Geometry1, typename Geometry2, typename GeometryOut>
bool intersection(Geometry1 const & geometry1, Geometry2 const & geometry2, GeometryOut & geometry_out)

Parameters

Type

Concept

Name

Description

Geometry1 const &

Any type fulfilling a Geometry Concept

geometry1

A model of the specified concept

Geometry2 const &

Any type fulfilling a Geometry Concept

geometry2

A model of the specified concept

GeometryOut &

Collection of geometries (e.g. std::vector, std::deque, boost::geometry::multi*) of which the value_type fulfills a Point, LineString or Polygon concept, or it is the output geometry (e.g. for a box)

geometry_out

The output geometry, either a multi_point, multi_polygon, multi_linestring, or a box (for intersection of two boxes)

Header

Either

#include <boost/geometry.hpp>

Or

#include <boost/geometry/algorithms/intersection.hpp>

Conformance

The function intersection implements function Intersection from the OGC Simple Feature Specification.

Behavior

Case

Behavior

GeometryOut is a Point

Calculates intersection points of input geometries

GeometryOut is a Linestring

Calculates intersection linestrings of input (multi)linestrings

GeometryOut is a Polygon

Calculates intersection polygons of input (multi)polygons and/or boxes

[Note] Note

Check the Polygon Concept for the rules that polygon input for this algorithm should fulfill

Example

Shows the intersection of two polygons

#include <iostream>
#include <deque>

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>

#include <boost/foreach.hpp>


int main()
{
    typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;

    polygon green, blue;

    boost::geometry::read_wkt(
        "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
            "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", green);

    boost::geometry::read_wkt(
        "POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))", blue);

    std::deque<polygon> output;
    boost::geometry::intersection(green, blue, output);

    int i = 0;
    std::cout << "green && blue:" << std::endl;
    BOOST_FOREACH(polygon const& p, output)
    {
        std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
    }


    return 0;
}

Output:

green && blue:
0: 2.50205

intersection

See also

PrevUpHomeNext