79class GEOS_DLL OverlayMixedPoints {
80 using Curve = geos::geom::Curve;
85 using CoordinateXY = geos::geom::CoordinateXY;
98 const PrecisionModel* pm;
99 const Geometry* geomPoint;
100 const Geometry* geomNonPointInput;
101 const GeometryFactory* geometryFactory;
105 std::unique_ptr<Geometry> geomNonPoint;
107 std::unique_ptr<PointOnGeometryLocator> locator;
111 std::unique_ptr<PointOnGeometryLocator> createLocator(
const Geometry* geomNonPoint);
113 std::unique_ptr<Geometry> prepareNonPoint(
const Geometry* geomInput);
115 std::unique_ptr<Geometry> computeIntersection(
const CoordinateSequence* coords)
const;
117 std::unique_ptr<Geometry> computeUnion(
const CoordinateSequence* coords);
119 std::unique_ptr<Geometry> computeDifference(
const CoordinateSequence* coords);
121 std::unique_ptr<Geometry> createPointResult(std::vector<std::unique_ptr<Point>>& points)
const;
123 std::vector<std::unique_ptr<Point>> findPoints(
bool isCovered,
const CoordinateSequence* coords)
const;
125 std::vector<std::unique_ptr<Point>> createPoints(
const CoordinateSequence& coords)
const;
127 bool hasLocation(
bool isCovered,
const CoordinateXY& coord)
const;
129 std::unique_ptr<Geometry> copyNonPoint()
const;
131 static std::unique_ptr<CoordinateSequence> extractCoordinates(
const Geometry* points,
const PrecisionModel* pm);
133 static std::vector<std::unique_ptr<Surface>> extractPolygons(
const Geometry*
geom);
135 static std::vector<std::unique_ptr<Curve>> extractLines(
const Geometry*
geom);
141 OverlayMixedPoints(
int p_opCode,
const Geometry* geom0,
const Geometry* geom1,
const PrecisionModel* p_pm, Noder* p_noder);
143 static std::unique_ptr<Geometry> overlay(
int opCode,
const Geometry* geom0,
const Geometry* geom1,
const PrecisionModel* pm, Noder* p_noder);
145 std::unique_ptr<Geometry> getResult();