18 #include <geos/export.h>
19 #include <geos/geom/Coordinate.h>
20 #include <geos/noding/MCIndexSegmentSetMutualIntersector.h>
21 #include <geos/operation/relateng/RelateGeometry.h>
29 class BoundaryNodeRule;
39 class TopologyPredicate;
40 class TopologyComputer;
41 class EdgeSegmentIntersector;
87 using CoordinateXY = geos::geom::CoordinateXY;
100 RelateGeometry geomA;
101 std::unique_ptr<MCIndexSegmentSetMutualIntersector> edgeMutualInt =
nullptr;
106 : boundaryNodeRule(bnRule)
107 , geomA(inputA, isPrepared, bnRule)
111 :
RelateNG(inputA, isPrepared, BoundaryNodeRule::getBoundaryRuleMod2())
114 bool hasRequiredEnvelopeInteraction(
const Geometry* b, TopologyPredicate& predicate);
116 bool finishValue(TopologyPredicate& predicate);
118 void computePP(RelateGeometry& geomB, TopologyComputer& topoComputer);
120 void computeAtPoints(RelateGeometry& geom,
bool isA, RelateGeometry& geomTarget, TopologyComputer& topoComputer);
122 bool computePoints(RelateGeometry& geom,
bool isA, RelateGeometry& geomTarget, TopologyComputer& topoComputer);
124 void computePoint(
bool isA,
const CoordinateXY* pt, RelateGeometry& geomTarget, TopologyComputer& topoComputer);
126 bool computeLineEnds(RelateGeometry& geom,
bool isA, RelateGeometry& geomTarget, TopologyComputer& topoComputer);
141 bool computeLineEnd(RelateGeometry& geom,
bool isA,
const CoordinateXY* pt, RelateGeometry& geomTarget, TopologyComputer& topoComputer);
143 bool computeAreaVertex(RelateGeometry& geom,
bool isA, RelateGeometry& geomTarget, TopologyComputer& topoComputer);
145 bool computeAreaVertex(RelateGeometry& geom,
bool isA,
const LinearRing* ring, RelateGeometry& geomTarget, TopologyComputer& topoComputer);
147 void computeAtEdges(RelateGeometry& geomB, TopologyComputer& topoComputer);
149 void computeEdgesAll(std::vector<const SegmentString*>& edgesB,
const Envelope* envInt, EdgeSegmentIntersector& intersector);
151 void computeEdgesMutual(std::vector<const SegmentString*>& edgesB,
const Envelope* envInt, EdgeSegmentIntersector& intersector);
288 bool relate(
const Geometry* a,
const std::string& pat);
289 std::unique_ptr<IntersectionMatrix> relate(
const Geometry* a);
An interface for rules which determine whether node points which are in boundaries of lineal geometry...
Definition: BoundaryNodeRule.h:52
An Envelope defines a rectangulare region of the 2D coordinate plane.
Definition: Envelope.h:59
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:197
Implementation of Dimensionally Extended Nine-Intersection Model (DE-9IM) matrix.
Definition: IntersectionMatrix.h:51
Models an OGC SFS LinearRing. A LinearRing is a LineString which is both closed and simple.
Definition: LinearRing.h:54
Intersects two sets of SegmentStrings using a index based on MonotoneChains and a SpatialIndex.
Definition: MCIndexSegmentSetMutualIntersector.h:47
An interface for classes which represent a sequence of contiguous line segments.
Definition: SegmentString.h:47
Definition: RelateNG.h:86
static bool relate(const Geometry *a, const Geometry *b, TopologyPredicate &pred)
static bool relate(const Geometry *a, const Geometry *b, TopologyPredicate &pred, const BoundaryNodeRule &bnRule)
bool evaluate(const Geometry *b, const std::string &imPattern)
bool evaluate(const Geometry *b, TopologyPredicate &predicate)
static std::unique_ptr< RelateNG > prepare(const Geometry *a)
std::unique_ptr< IntersectionMatrix > evaluate(const Geometry *b)
static std::unique_ptr< IntersectionMatrix > relate(const Geometry *a, const Geometry *b)
static std::unique_ptr< RelateNG > prepare(const Geometry *a, const BoundaryNodeRule &bnRule)
static bool relate(const Geometry *a, const Geometry *b, const std::string &imPattern)
static std::unique_ptr< IntersectionMatrix > relate(const Geometry *a, const Geometry *b, const BoundaryNodeRule &bnRule)
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25