GEOS  3.9.1dev
Public Member Functions | Private Member Functions | Private Attributes | List of all members
geos::operation::overlayng::PolygonBuilder Class Reference

#include <PolygonBuilder.h>

Collaboration diagram for geos::operation::overlayng::PolygonBuilder:
[legend]

Public Member Functions

 PolygonBuilder (std::vector< OverlayEdge * > &resultAreaEdges, const geom::GeometryFactory *geomFact)
 
 PolygonBuilder (std::vector< OverlayEdge * > &resultAreaEdges, const geom::GeometryFactory *geomFact, bool p_isEnforcePolygonal)
 
 PolygonBuilder (const PolygonBuilder &)=delete
 
PolygonBuilderoperator= (const PolygonBuilder &)=delete
 
std::vector< std::unique_ptr< geom::Polygon > > getPolygons ()
 
std::vector< OverlayEdgeRing * > getShellRings ()
 

Private Member Functions

std::vector< std::unique_ptr< geom::Polygon > > computePolygons (std::vector< OverlayEdgeRing * > shellList)
 
void buildRings (std::vector< OverlayEdge * > &resultAreaEdges)
 
void linkResultAreaEdgesMax (std::vector< OverlayEdge * > &resultEdges)
 
std::vector< std::unique_ptr< MaximalEdgeRing > > buildMaximalRings (std::vector< OverlayEdge * > &edges)
 
std::vector< OverlayEdgeRing * > storeMinimalRings (std::vector< std::unique_ptr< OverlayEdgeRing >> &minRings)
 
void buildMinimalRings (std::vector< std::unique_ptr< MaximalEdgeRing >> &maxRings)
 
void assignShellsAndHoles (std::vector< OverlayEdgeRing * > &minRings)
 
OverlayEdgeRingfindSingleShell (std::vector< OverlayEdgeRing * > &edgeRings) const
 
void assignHoles (OverlayEdgeRing *shell, std::vector< OverlayEdgeRing * > &edgeRings)
 
void placeFreeHoles (std::vector< OverlayEdgeRing * > shellList, std::vector< OverlayEdgeRing * > freeHoleList)
 

Private Attributes

const geom::GeometryFactorygeometryFactory
 
std::vector< OverlayEdgeRing * > shellList
 
std::vector< OverlayEdgeRing * > freeHoleList
 
bool isEnforcePolygonal
 
std::vector< std::unique_ptr< OverlayEdgeRing > > vecOER
 

Detailed Description

Definition at line 45 of file g/PolygonBuilder.h.

Constructor & Destructor Documentation

geos::operation::overlayng::PolygonBuilder::PolygonBuilder ( std::vector< OverlayEdge * > &  resultAreaEdges,
const geom::GeometryFactory geomFact 
)
inline

Definition at line 123 of file g/PolygonBuilder.h.

geos::operation::overlayng::PolygonBuilder::PolygonBuilder ( std::vector< OverlayEdge * > &  resultAreaEdges,
const geom::GeometryFactory geomFact,
bool  p_isEnforcePolygonal 
)
inline

Definition at line 130 of file g/PolygonBuilder.h.

geos::operation::overlayng::PolygonBuilder::PolygonBuilder ( const PolygonBuilder )
delete

Member Function Documentation

void geos::operation::overlayng::PolygonBuilder::assignHoles ( OverlayEdgeRing shell,
std::vector< OverlayEdgeRing * > &  edgeRings 
)
private

For the set of minimal rings comprising a maximal ring, assigns the holes to the shell known to contain them. Assigning the holes directly to the shell serves two purposes:

  • it is faster than using a point-in-polygon check later on.
  • it ensures correctness, since if the PIP test was used the point chosen might lie on the shell, which might return an incorrect result from the PIP test
void geos::operation::overlayng::PolygonBuilder::assignShellsAndHoles ( std::vector< OverlayEdgeRing * > &  minRings)
private
std::vector<std::unique_ptr<MaximalEdgeRing> > geos::operation::overlayng::PolygonBuilder::buildMaximalRings ( std::vector< OverlayEdge * > &  edges)
private

For all OverlayEdge*s in result, form them into MaximalEdgeRings

void geos::operation::overlayng::PolygonBuilder::buildMinimalRings ( std::vector< std::unique_ptr< MaximalEdgeRing >> &  maxRings)
private
void geos::operation::overlayng::PolygonBuilder::buildRings ( std::vector< OverlayEdge * > &  resultAreaEdges)
private
std::vector<std::unique_ptr<geom::Polygon> > geos::operation::overlayng::PolygonBuilder::computePolygons ( std::vector< OverlayEdgeRing * >  shellList)
private
OverlayEdgeRing* geos::operation::overlayng::PolygonBuilder::findSingleShell ( std::vector< OverlayEdgeRing * > &  edgeRings) const
private

Finds the single shell, if any, out of a list of minimal rings derived from a maximal ring. The other possibility is that they are a set of (connected) holes, in which case no shell will be found.

Returns
the shell ring, if there is one or null, if all rings are holes
std::vector<std::unique_ptr<geom::Polygon> > geos::operation::overlayng::PolygonBuilder::getPolygons ( )
std::vector<OverlayEdgeRing*> geos::operation::overlayng::PolygonBuilder::getShellRings ( )
void geos::operation::overlayng::PolygonBuilder::linkResultAreaEdgesMax ( std::vector< OverlayEdge * > &  resultEdges)
private
PolygonBuilder& geos::operation::overlayng::PolygonBuilder::operator= ( const PolygonBuilder )
delete
void geos::operation::overlayng::PolygonBuilder::placeFreeHoles ( std::vector< OverlayEdgeRing * >  shellList,
std::vector< OverlayEdgeRing * >  freeHoleList 
)
private

Place holes have not yet been assigned to a shell. These "free" holes should all be properly contained in their parent shells, so it is safe to use the findEdgeRingContaining method. (This is the case because any holes which are NOT properly contained (i.e. are connected to their parent shell) would have formed part of a MaximalEdgeRing and been handled in a previous step).

Exceptions
TopologyExceptionif a hole cannot be assigned to a shell
std::vector<OverlayEdgeRing*> geos::operation::overlayng::PolygonBuilder::storeMinimalRings ( std::vector< std::unique_ptr< OverlayEdgeRing >> &  minRings)
private

The lifespan of the OverlayEdgeRings is tieds to the lifespan of the PolygonBuilder, so we hold them on the PolygonBuilder and use bare pointers for managing the relationships

Member Data Documentation

std::vector<OverlayEdgeRing*> geos::operation::overlayng::PolygonBuilder::freeHoleList
private

Definition at line 52 of file g/PolygonBuilder.h.

const geom::GeometryFactory* geos::operation::overlayng::PolygonBuilder::geometryFactory
private

Definition at line 50 of file g/PolygonBuilder.h.

bool geos::operation::overlayng::PolygonBuilder::isEnforcePolygonal
private

Definition at line 53 of file g/PolygonBuilder.h.

std::vector<OverlayEdgeRing*> geos::operation::overlayng::PolygonBuilder::shellList
private

Definition at line 51 of file g/PolygonBuilder.h.

std::vector<std::unique_ptr<OverlayEdgeRing> > geos::operation::overlayng::PolygonBuilder::vecOER
private

Definition at line 56 of file g/PolygonBuilder.h.


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