GEOS  3.9.1dev
Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
geos::operation::geounion::CascadedPolygonUnion Class Reference

Provides an efficient method of unioning a collection of polygonal geometries. More...

#include <CascadedPolygonUnion.h>

Collaboration diagram for geos::operation::geounion::CascadedPolygonUnion:
[legend]

Public Member Functions

 CascadedPolygonUnion ()
 
 CascadedPolygonUnion (std::vector< geom::Polygon * > *polys)
 Creates a new instance to union the given collection of Geometrys. More...
 
 CascadedPolygonUnion (std::vector< geom::Polygon * > *polys, UnionStrategy *unionFun)
 
geom::GeometryUnion ()
 Computes the union of the input geometries. More...
 

Static Public Member Functions

static geom::GeometryUnion (std::vector< geom::Polygon * > *polys)
 Computes the union of a collection of polygonal Geometrys. More...
 
static geom::GeometryUnion (std::vector< geom::Polygon * > *polys, UnionStrategy *unionFun)
 
template<class T >
static geom::GeometryUnion (T start, T end, UnionStrategy *unionStrategy)
 Computes the union of a set of polygonal Geometrys. More...
 
static geom::GeometryUnion (const geom::MultiPolygon *polys)
 Computes the union of a collection of polygonal Geometrys. More...
 

Private Member Functions

geom::GeometryunionTree (index::strtree::ItemsList *geomTree)
 
geom::GeometrybinaryUnion (GeometryListHolder *geoms)
 
geom::GeometrybinaryUnion (GeometryListHolder *geoms, std::size_t start, std::size_t end)
 
GeometryListHolderreduceToGeometries (index::strtree::ItemsList *geomTree)
 
geom::GeometryunionSafe (geom::Geometry *g0, geom::Geometry *g1)
 
geom::GeometryunionActual (geom::Geometry *g0, geom::Geometry *g1)
 

Static Private Member Functions

static std::unique_ptr< geom::GeometryrestrictToPolygons (std::unique_ptr< geom::Geometry > g)
 Computes a Geometry containing only polygonal components. More...
 

Private Attributes

std::vector< geom::Polygon * > * inputPolys
 
geom::GeometryFactory const * geomFactory
 
UnionStrategyunionFunction
 
ClassicUnionStrategy defaultUnionFunction
 

Static Private Attributes

static int const STRTREE_NODE_CAPACITY = 4
 

Detailed Description

Provides an efficient method of unioning a collection of polygonal geometries.

This algorithm is faster and likely more robust than the simple iterated approach of repeatedly unioning each polygon to a result geometry.

The buffer(0) trick is sometimes faster, but can be less robust and can sometimes take an exceptionally long time to complete. This is particularly the case where there is a high degree of overlap between the polygons. In this case, buffer(0) is forced to compute with all line segments from the outset, whereas cascading can eliminate many segments at each stage of processing. The best case for buffer(0) is the trivial case where there is no overlap between the input geometries. However, this case is likely rare in practice.

Definition at line 112 of file CascadedPolygonUnion.h.

Constructor & Destructor Documentation

geos::operation::geounion::CascadedPolygonUnion::CascadedPolygonUnion ( )
geos::operation::geounion::CascadedPolygonUnion::CascadedPolygonUnion ( std::vector< geom::Polygon * > *  polys)
inline

Creates a new instance to union the given collection of Geometrys.

Parameters
polysa collection of polygonal Geometrys. Ownership of elements and vector are left to caller.

Definition at line 189 of file CascadedPolygonUnion.h.

geos::operation::geounion::CascadedPolygonUnion::CascadedPolygonUnion ( std::vector< geom::Polygon * > *  polys,
UnionStrategy unionFun 
)
inline

Definition at line 195 of file CascadedPolygonUnion.h.

Member Function Documentation

geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::binaryUnion ( GeometryListHolder geoms)
private

Unions a list of geometries by treating the list as a flattened binary tree, and performing a cascaded union on the tree.

geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::binaryUnion ( GeometryListHolder geoms,
std::size_t  start,
std::size_t  end 
)
private

Unions a section of a list using a recursive binary union on each half of the section.

Parameters
geomsthe list of geometries containing the section to union
startthe start index of the section
endthe index after the end of the section
Returns
the union of the list section
GeometryListHolder* geos::operation::geounion::CascadedPolygonUnion::reduceToGeometries ( index::strtree::ItemsList geomTree)
private

Reduces a tree of geometries to a list of geometries by recursively unioning the subtrees in the list.

Parameters
geomTreea tree-structured list of geometries
Returns
a list of Geometrys
static std::unique_ptr<geom::Geometry> geos::operation::geounion::CascadedPolygonUnion::restrictToPolygons ( std::unique_ptr< geom::Geometry g)
staticprivate

Computes a Geometry containing only polygonal components.

Extracts the Polygons from the input and returns them as an appropriate polygonal geometry.

If the input is already Polygonal, it is returned unchanged.

A particular use case is to filter out non-polygonal components returned from an overlay operation.

Parameters
gthe geometry to filter
Returns
a Polygonal geometry
static geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::Union ( std::vector< geom::Polygon * > *  polys)
static

Computes the union of a collection of polygonal Geometrys.

Parameters
polysa collection of polygonal Geometrys. ownership of elements and vector are left to caller.
static geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::Union ( std::vector< geom::Polygon * > *  polys,
UnionStrategy unionFun 
)
static
template<class T >
static geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::Union ( start,
end,
UnionStrategy unionStrategy 
)
inlinestatic

Computes the union of a set of polygonal Geometrys.

Template Parameters
Tan iterator yelding something castable to const Polygon *
Parameters
startstart iterator
endend iterator
unionStrategystrategy to apply

Definition at line 164 of file CascadedPolygonUnion.h.

static geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::Union ( const geom::MultiPolygon polys)
static

Computes the union of a collection of polygonal Geometrys.

Parameters
polysa collection of polygonal Geometrys. Ownership of elements and vector are left to caller.
geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::Union ( )

Computes the union of the input geometries.

Returns
the union of the input geometries
null if no input geometries were provided
geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::unionActual ( geom::Geometry g0,
geom::Geometry g1 
)
private

Encapsulates the actual unioning of two polygonal geometries.

Parameters
g0
g1
Returns
geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::unionSafe ( geom::Geometry g0,
geom::Geometry g1 
)
private

Computes the union of two geometries, either of both of which may be null.

Parameters
g0a Geometry
g1a Geometry
Returns
the union of the input(s)
null if both inputs are null
geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::unionTree ( index::strtree::ItemsList geomTree)
private

Member Data Documentation

ClassicUnionStrategy geos::operation::geounion::CascadedPolygonUnion::defaultUnionFunction
private

Definition at line 212 of file CascadedPolygonUnion.h.

geom::GeometryFactory const* geos::operation::geounion::CascadedPolygonUnion::geomFactory
private

Definition at line 115 of file CascadedPolygonUnion.h.

std::vector<geom::Polygon*>* geos::operation::geounion::CascadedPolygonUnion::inputPolys
private

Definition at line 114 of file CascadedPolygonUnion.h.

int const geos::operation::geounion::CascadedPolygonUnion::STRTREE_NODE_CAPACITY = 4
staticprivate

The effectiveness of the index is somewhat sensitive to the node capacity. Testing indicates that a smaller capacity is better. For an STRtree, 4 is probably a good number (since this produces 2x2 "squares").

Definition at line 124 of file CascadedPolygonUnion.h.

UnionStrategy* geos::operation::geounion::CascadedPolygonUnion::unionFunction
private

Definition at line 211 of file CascadedPolygonUnion.h.


The documentation for this class was generated from the following file: