GEOS  3.9.1dev
OverlayMixedPoints.h
Go to the documentation of this file.
1 /**********************************************************************
2  *
3  * GEOS - Geometry Engine Open Source
4  * http://geos.osgeo.org
5  *
6  * Copyright (C) 2020 Paul Ramsey <pramsey@cleverelephant.ca>
7  *
8  * This is free software; you can redistribute and/or modify it under
9  * the terms of the GNU Lesser General Public Licence as published
10  * by the Free Software Foundation.
11  * See the COPYING file for more information.
12  *
13  **********************************************************************/
14 
15 #pragma once
16 
17 
18 #include <geos/geom/Point.h>
19 #include <geos/geom/Polygon.h>
20 #include <geos/geom/LineString.h>
21 
22 #include <geos/export.h>
23 
24 #include <set>
25 #include <memory>
26 #include <vector>
27 
28 
29 // Forward declarations
30 namespace geos {
31 namespace geom {
32 class GeometryFactory;
33 class PrecisionModel;
34 class Geometry;
35 class Coordinate;
36 class CoordinateArraySequence;
37 }
38 namespace algorithm {
39 namespace locate {
40 class PointOnGeometryLocator;
41 }
42 }
43 }
44 
45 namespace geos { // geos.
46 namespace operation { // geos.operation
47 namespace overlayng { // geos.operation.overlayng
48 
49 using namespace geos::geom;
50 using algorithm::locate::PointOnGeometryLocator;
51 
80 
81 private:
82 
83  // Members
84  int opCode;
89  bool isPointRHS;
90 
91  std::unique_ptr<Geometry> geomNonPoint;
93  std::unique_ptr<PointOnGeometryLocator> locator;
94  int resultDim;
95 
96  // Methods
97  std::unique_ptr<PointOnGeometryLocator> createLocator(const Geometry* geomNonPoint);
98 
99  std::unique_ptr<Geometry> prepareNonPoint(const Geometry* geomInput);
100 
101  std::unique_ptr<Geometry> computeIntersection(const CoordinateArraySequence* coords) const;
102 
103  std::unique_ptr<Geometry> computeUnion(const CoordinateArraySequence* coords);
104 
105  std::unique_ptr<Geometry> computeDifference(const CoordinateArraySequence* coords);
106 
107  std::unique_ptr<Geometry> createPointResult(std::vector<std::unique_ptr<Point>>& points) const;
108 
109  std::vector<std::unique_ptr<Point>> findPoints(bool isCovered, const CoordinateArraySequence* coords) const;
110 
111  std::vector<std::unique_ptr<Point>> createPoints(std::set<Coordinate>& coords) const;
112 
113  bool hasLocation(bool isCovered, const Coordinate& coord) const;
114 
115  std::unique_ptr<Geometry> copyNonPoint() const;
116 
117  std::unique_ptr<CoordinateArraySequence> extractCoordinates(const Geometry* points, const PrecisionModel* pm) const;
118 
119  std::vector<std::unique_ptr<Polygon>> extractPolygons(const Geometry* geom) const;
120 
121  std::vector<std::unique_ptr<LineString>> extractLines(const Geometry* geom) const;
122 
123 
124 
125 public:
126 
127  OverlayMixedPoints(int p_opCode, const Geometry* geom0, const Geometry* geom1, const PrecisionModel* p_pm);
128 
129  static std::unique_ptr<Geometry> overlay(int opCode, const Geometry* geom0, const Geometry* geom1, const PrecisionModel* pm);
130 
131  std::unique_ptr<Geometry> getResult();
132 
133 
134 
135 
136 };
137 
138 
139 } // namespace geos.operation.overlayng
140 } // namespace geos.operation
141 } // namespace geos
142 
#define GEOS_DLL
Definition: export.h:28
The default implementation of CoordinateSequence.
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
Specifies the precision model of the Coordinate in a Geometry.
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:188
std::unique_ptr< PointOnGeometryLocator > locator
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Basic namespace for all GEOS functionalities.