...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Clears a linestring, ring or polygon (exterior+interiors) or multi*.
Generic function to clear a geometry. All points will be removed from the collection or collections making up the geometry. In most cases this is equivalent to the .clear() method of a std::vector<...>. In the case of a polygon, this clear functionality is automatically called for the exterior ring, and for the interior ring collection. In the case of a point, boxes and segments, nothing will happen.
template<typename Geometry> void clear(Geometry & geometry)
Type 
Concept 
Name 
Description 

Geometry & 
Any type fulfilling a Geometry Concept 
geometry 
A model of the specified concept which will be cleared 
Either
#include <boost/geometry.hpp>
Or
#include <boost/geometry/algorithms/clear.hpp>
The function clear is not defined by OGC.
The function clear conforms to the clear() method of the C++ stdlibrary.
Geometry 
Status 

Point 

Segment 

Box 

Linestring 

Ring 

Polygon 

MultiPoint 

MultiLinestring 

MultiPolygon 

Variant 

Case 
Behavior 

Point 
Nothing happens, geometry is unchanged 
Segment 
Nothing happens, geometry is unchanged 
Box 
Nothing happens, geometry is unchanged 
Linestring 
Linestring is cleared 
Ring 
Ring is cleared 
Polygon 
The exterior ring is cleared and all interior rings are removed 
Multi Point 
Multi Point is cleared 
Multi Linestring 
Multi Linestring is cleared 
Multi Polygon 
Multi Polygon is cleared 
Constant
Shows how to clear a ring or polygon
#include <iostream> #include <boost/geometry.hpp> #include <boost/geometry/geometries/polygon.hpp> #include <boost/geometry/geometries/ring.hpp> #include <boost/geometry/geometries/adapted/boost_tuple.hpp> BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian) int main() { using point = boost::tuple<float, float>; using polygon = boost::geometry::model::polygon<point>; using ring = boost::geometry::model::ring<point>; // Create a square as exterior ring, with a triangle as interior ring polygon poly{{{0, 0}, {0, 10}, {10, 10}, {10, 0}, {0, 0}}, {{{1, 2}, {8, 2}, {4, 6}, {1, 2}}}}; std::cout << boost::geometry::dsv(poly) << std::endl; boost::geometry::clear(poly); std::cout << boost::geometry::dsv(poly) << std::endl; // Create a triangle ring r{{0, 0}, {0, 9}, {8, 8}, {0, 0}}; std::cout << boost::geometry::dsv(r) << std::endl; boost::geometry::clear(r); std::cout << boost::geometry::dsv(r) << std::endl; return 0; }
Output:
(((0, 0), (0, 10), (10, 10), (10, 0), (0, 0)), ((1, 2), (8, 2), (4, 6), (1, 2))) (()) ((0, 0), (0, 9), (8, 8), (0, 0)) ()