GEOS
3.9.1dev
|
Provides an efficient method of unioning a collection of polygonal geometries. More...
#include <CascadedPolygonUnion.h>
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::Geometry * | Union () |
Computes the union of the input geometries. More... | |
Static Public Member Functions | |
static geom::Geometry * | Union (std::vector< geom::Polygon * > *polys) |
Computes the union of a collection of polygonal Geometrys. More... | |
static geom::Geometry * | Union (std::vector< geom::Polygon * > *polys, UnionStrategy *unionFun) |
template<class T > | |
static geom::Geometry * | Union (T start, T end, UnionStrategy *unionStrategy) |
Computes the union of a set of polygonal Geometrys. More... | |
static geom::Geometry * | Union (const geom::MultiPolygon *polys) |
Computes the union of a collection of polygonal Geometrys. More... | |
Private Member Functions | |
geom::Geometry * | unionTree (index::strtree::ItemsList *geomTree) |
geom::Geometry * | binaryUnion (GeometryListHolder *geoms) |
geom::Geometry * | binaryUnion (GeometryListHolder *geoms, std::size_t start, std::size_t end) |
GeometryListHolder * | reduceToGeometries (index::strtree::ItemsList *geomTree) |
geom::Geometry * | unionSafe (geom::Geometry *g0, geom::Geometry *g1) |
geom::Geometry * | unionActual (geom::Geometry *g0, geom::Geometry *g1) |
Static Private Member Functions | |
static std::unique_ptr< geom::Geometry > | restrictToPolygons (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 |
UnionStrategy * | unionFunction |
ClassicUnionStrategy | defaultUnionFunction |
Static Private Attributes | |
static int const | STRTREE_NODE_CAPACITY = 4 |
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.
geos::operation::geounion::CascadedPolygonUnion::CascadedPolygonUnion | ( | ) |
|
inline |
Creates a new instance to union the given collection of Geometrys.
polys | a collection of polygonal Geometrys. Ownership of elements and vector are left to caller. |
Definition at line 189 of file CascadedPolygonUnion.h.
|
inline |
Definition at line 195 of file CascadedPolygonUnion.h.
|
private |
Unions a list of geometries by treating the list as a flattened binary tree, and performing a cascaded union on the tree.
|
private |
Unions a section of a list using a recursive binary union on each half of the section.
geoms | the list of geometries containing the section to union |
start | the start index of the section |
end | the index after the end of the section |
|
private |
Reduces a tree of geometries to a list of geometries by recursively unioning the subtrees in the list.
geomTree | a tree-structured list of geometries |
|
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.
g | the geometry to filter |
|
static |
|
static |
|
inlinestatic |
Computes the union of a set of polygonal Geometrys.
T | an iterator yelding something castable to const Polygon * |
start | start iterator |
end | end iterator |
unionStrategy | strategy to apply |
Definition at line 164 of file CascadedPolygonUnion.h.
|
static |
geom::Geometry* geos::operation::geounion::CascadedPolygonUnion::Union | ( | ) |
Computes the union of the input geometries.
null
if no input geometries were provided
|
private |
Encapsulates the actual unioning of two polygonal geometries.
g0 | |
g1 |
|
private |
Computes the union of two geometries, either of both of which may be null.
g0 | a Geometry |
g1 | a Geometry |
|
private |
|
private |
Definition at line 212 of file CascadedPolygonUnion.h.
|
private |
Definition at line 115 of file CascadedPolygonUnion.h.
|
private |
Definition at line 114 of file CascadedPolygonUnion.h.
|
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.
|
private |
Definition at line 211 of file CascadedPolygonUnion.h.