22 #include <geos/algorithm/LineIntersector.h>
23 #include <geos/algorithm/BoundaryNodeRule.h>
24 #include <geos/geom/CoordinateArraySequence.h>
25 #include <geos/noding/SegmentIntersector.h>
32 class BasicSegmentString;
35 class BoundaryNodeRule;
40 class MultiLineString;
44 class GeometryCollection;
101 bool isClosedEndpointsInInterior =
true;
102 bool isFindAllLocations =
false;
103 bool isSimpleResult =
false;
104 std::vector<geom::Coordinate> nonSimplePts;
105 bool computed =
false;
134 static std::vector<std::unique_ptr<geos::geom::CoordinateArraySequence>>
137 static std::vector<std::unique_ptr<noding::SegmentString>>
138 createSegmentStrings(std::vector<std::unique_ptr<geos::geom::CoordinateArraySequence>>& seqs);
145 bool isClosedEndpointsInInterior;
146 bool isFindAll =
false;
148 std::vector<geom::Coordinate>& intersectionPts;
156 bool findIntersection(
171 bool isIntersectionEndpoint(
183 std::size_t intersectionVertexIndex(
188 NonSimpleIntersectionFinder(
189 bool p_isClosedEndpointsInInterior,
191 std::vector<geom::Coordinate>& p_intersectionPts)
192 : isClosedEndpointsInInterior(p_isClosedEndpointsInInterior)
193 , isFindAll(p_isFindAll)
194 , intersectionPts(p_intersectionPts)
202 bool hasIntersection()
const;
204 void processIntersections(
208 bool isDone()
const override;
225 :
IsSimpleOp(geom, algorithm::BoundaryNodeRule::getBoundaryRuleMod2())
236 , isClosedEndpointsInInterior(! p_boundaryNodeRule.isInBoundary(2))
237 , isFindAllLocations(false)
250 if (!geom)
return false;
251 return isSimple(*geom);
An interface for rules which determine whether node points which are in boundaries of lineal geometry...
Definition: BoundaryNodeRule.h:51
A LineIntersector is an algorithm that can both test whether two line segments intersect and compute ...
Definition: LineIntersector.h:50
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:188
Definition: MultiPoint.h:54
Processes possible intersections detected by a Noder.
Definition: noding/SegmentIntersector.h:48
An interface for classes which represent a sequence of contiguous line segments.
Definition: SegmentString.h:46
Definition: IsSimpleOp.h:96
geom::Coordinate getNonSimpleLocation()
void setFindAllLocations(bool isFindAll)
IsSimpleOp(const geom::Geometry &geom)
Definition: IsSimpleOp.h:224
static bool isSimple(const geom::Geometry &geom)
geom::Coordinate getNonSimpleLocation(const geom::Geometry &geom)
const std::vector< geom::Coordinate > & getNonSimpleLocations()
IsSimpleOp(const geom::Geometry &geom, const algorithm::BoundaryNodeRule &p_boundaryNodeRule)
Definition: IsSimpleOp.h:234
Basic namespace for all GEOS functionalities.
Definition: Angle.h:26