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 a snapshot of the develop branch, built from commit c6ae40a822.
PrevUpHomeNext
difference

Description

Calculate the difference of two geometries

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

Synopsis

template<typename Geometry1, typename Geometry2, typename Collection>
void difference(Geometry1 const & geometry1, Geometry2 const & geometry2, Collection & output_collection)

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

Collection &

output collection, either a multi-geometry, or a std::vector<Geometry> / std::deque<Geometry> etc

output_collection

the output collection

Header

Either

#include <boost/geometry.hpp>

Or

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

Conformance

The function difference implements function Difference from the OGC Simple Feature Specification.

Behavior

Case

Behavior

areal (e.g. polygon)

All combinations of: box, ring, polygon, multi_polygon

linear (e.g. linestring) / areal (e.g. polygon)

A combinations of a (multi) linestring with a (multi) polygon results in a collection of linestrings

linear (e.g. linestring)

All combinations of: linestring, multi_linestring; results in a collection of linestrings

pointlike (e.g. point)

All combinations of: point, multi_point; results in a collection of points

Other geometries

Not yet supported in this version

Spherical

Not yet supported in this version

Three dimensional

Not yet supported in this version

[Note] Note

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

Example

Shows how to subtract one polygon from another polygon

#include <iostream>
#include <list>

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


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

    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::list<polygon> output;
    boost::geometry::difference(green, blue, output);

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


    output.clear();
    boost::geometry::difference(blue, green, output);

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


    return 0;
}

Output:

green - blue:
0: 0.02375
1: 0.542951
2: 0.0149697
3: 0.226855
4: 0.839424

difference_a

blue - green:
0: 0.525154
1: 0.015
2: 0.181136
3: 0.128798
4: 0.340083
5: 0.307778

difference_b
See also

PrevUpHomeNext