GEOS
3.9.1dev
|
#include <EdgeNodingBuilder.h>
Public Member Functions | |
EdgeNodingBuilder (const PrecisionModel *p_pm, Noder *p_customNoder) | |
~EdgeNodingBuilder () | |
void | setClipEnvelope (const Envelope *clipEnv) |
bool | hasEdgesFor (int geomIndex) const |
std::vector< Edge * > | build (const Geometry *geom0, const Geometry *geom1) |
Private Member Functions | |
Noder * | getNoder () |
std::unique_ptr< Noder > | createFixedPrecisionNoder (const PrecisionModel *pm) |
std::unique_ptr< Noder > | createFloatingPrecisionNoder (bool doValidation) |
void | addCollection (const GeometryCollection *gc, int geomIndex) |
void | addGeometryCollection (const GeometryCollection *gc, int geomIndex, int expectedDim) |
void | addPolygon (const Polygon *poly, int geomIndex) |
void | addPolygonRing (const LinearRing *ring, bool isHole, int geomIndex) |
void | addLine (const LineString *line, int geomIndex) |
void | addLine (std::unique_ptr< CoordinateArraySequence > &pts, int geomIndex) |
void | addEdge (std::unique_ptr< std::vector< Coordinate >> pts, const EdgeSourceInfo *info) |
void | addEdge (std::unique_ptr< CoordinateArraySequence > &cas, const EdgeSourceInfo *info) |
const EdgeSourceInfo * | createEdgeSourceInfo (int index, int depthDelta, bool isHole) |
const EdgeSourceInfo * | createEdgeSourceInfo (int index) |
bool | isClippedCompletely (const Envelope *env) |
bool | isToBeLimited (const LineString *line) const |
std::vector< std::unique_ptr< CoordinateArraySequence > > & | limit (const LineString *line) |
std::unique_ptr< CoordinateArraySequence > | clip (const LinearRing *line) |
std::unique_ptr< CoordinateArraySequence > | removeRepeatedPoints (const LineString *line) |
int | computeDepthDelta (const LinearRing *ring, bool isHole) |
void | add (const Geometry *g, int geomIndex) |
std::vector< Edge * > | node (std::vector< SegmentString * > *segStrings) |
std::vector< Edge * > | createEdges (std::vector< SegmentString * > *segStrings) |
Private Attributes | |
const PrecisionModel * | pm |
std::unique_ptr< std::vector< SegmentString * > > | inputEdges |
Noder * | customNoder |
std::array< bool, 2 > | hasEdges |
const Envelope * | clipEnv |
std::unique_ptr< RingClipper > | clipper |
std::unique_ptr< LineLimiter > | limiter |
LineIntersector | lineInt |
IntersectionAdder | intAdder |
std::unique_ptr< Noder > | internalNoder |
std::unique_ptr< Noder > | spareInternalNoder |
std::deque< EdgeSourceInfo > | edgeSourceInfoQue |
std::deque< Edge > | edgeQue |
Static Private Attributes | |
static constexpr int | MIN_LIMIT_PTS = 20 |
static constexpr bool | IS_NODING_VALIDATED = true |
Builds a set of noded, unique, labelled Edges from the edges of the two input geometries.
It performs the following steps:
Definition at line 80 of file EdgeNodingBuilder.h.
|
inline |
Creates a new builder, with an optional custom noder. If the noder is not provided, a suitable one will be used based on the supplied precision model.
Definition at line 198 of file EdgeNodingBuilder.h.
|
inline |
Definition at line 207 of file EdgeNodingBuilder.h.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
std::vector<Edge*> geos::operation::overlayng::EdgeNodingBuilder::build | ( | const Geometry * | geom0, |
const Geometry * | geom1 | ||
) |
Creates a set of labelled {Edge}s. representing the fully noded edges of the input geometries. Coincident edges (from the same or both geometries) are merged along with their labels into a single unique, fully labelled edge.
geom0 | the first geometry |
geom1 | the second geometry |
|
private |
If a clipper is present, clip the line to the clip extent. Otherwise, remove duplicate points from the ring.
If clipping is enabled, then every ring MUST be clipped, to ensure that holes are clipped to be inside the shell. This means it is not possible to skip clipping for rings with few vertices.
ring | the line to clip |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
Gets a noder appropriate for the precision model supplied. This is one of:
bool geos::operation::overlayng::EdgeNodingBuilder::hasEdgesFor | ( | int | geomIndex | ) | const |
Reports whether there are noded edges for the given input geometry. If there are none, this indicates that either the geometry was empty, or has completely collapsed (because it is smaller than the noding precision).
geomIndex | index of input geometry |
|
private |
Tests whether a geometry (represented by its envelope) lies completely outside the clip extent(if any).
|
private |
Tests whether it is worth limiting a line. Lines that have few vertices or are covered by the clip extent do not need to be limited.
|
private |
If limiter is provided, limit the line to the clip envelope.
|
private |
Nodes a set of segment strings and creates Edges from the result. The input segment strings each carry a EdgeSourceInfo object, which is used to provide source topology info to the constructed Edges (and is then discarded).
|
private |
Removes any repeated points from a linear component. This is required so that noding can be computed correctly.
line | the line to process |
void geos::operation::overlayng::EdgeNodingBuilder::setClipEnvelope | ( | const Envelope * | clipEnv | ) |
|
private |
Definition at line 93 of file EdgeNodingBuilder.h.
|
private |
Definition at line 94 of file EdgeNodingBuilder.h.
|
private |
Definition at line 91 of file EdgeNodingBuilder.h.
|
private |
Definition at line 104 of file EdgeNodingBuilder.h.
|
private |
Definition at line 103 of file EdgeNodingBuilder.h.
|
private |
Definition at line 92 of file EdgeNodingBuilder.h.
|
private |
Definition at line 90 of file EdgeNodingBuilder.h.
|
private |
Definition at line 99 of file EdgeNodingBuilder.h.
|
private |
Definition at line 100 of file EdgeNodingBuilder.h.
|
staticprivate |
Definition at line 86 of file EdgeNodingBuilder.h.
|
private |
Definition at line 95 of file EdgeNodingBuilder.h.
|
private |
Definition at line 98 of file EdgeNodingBuilder.h.
|
staticprivate |
Definition at line 85 of file EdgeNodingBuilder.h.
|
private |
Definition at line 89 of file EdgeNodingBuilder.h.
|
private |
Definition at line 101 of file EdgeNodingBuilder.h.