17#include <geos/geom/Point.h>
18#include <geos/geom/Polygon.h>
19#include <geos/geom/LineString.h>
20#include <geos/geom/Geometry.h>
22#include <geos/export.h>
67 static constexpr double SAFE_ENV_BUFFER_FACTOR = 0.1;
68 static constexpr int SAFE_ENV_GRID_FACTOR = 3;
69 static constexpr double AREA_HEURISTIC_TOLERANCE = 0.1;
82 static bool resultEnvelope(
int opCode,
const InputGeometry* inputGeom,
const PrecisionModel* pm, Envelope& rsltEnvelope);
83 static double safeExpandDistance(
const Envelope* env,
const PrecisionModel* pm);
84 static bool safeEnv(
const Envelope* env,
const PrecisionModel* pm, Envelope& rsltEnvelope);
86 static bool isEmpty(
const Geometry*
geom);
93 static bool isDisjoint(
const Envelope* envA,
const Envelope* envB,
const PrecisionModel* pm);
95 static bool isLess(
double v1,
double v2,
double tol) {
96 return v1 <= v2 * (1 + tol);
99 static bool isGreater(
double v1,
double v2,
double tol) {
100 return v1 >= v2 * (1 - tol);
106 static bool isFloating(
const PrecisionModel* pm);
131 static bool isEmptyResult(
int opCode,
const Geometry* a,
const Geometry* b,
const PrecisionModel* pm);
138 static bool isEnvDisjoint(
const Geometry* a,
const Geometry* b,
const PrecisionModel* pm);
147 static std::unique_ptr<Geometry>
createEmptyResult(
int dim,
size_t coordDim,
const GeometryFactory* geomFact);
175 std::vector<std::unique_ptr<Polygon>>& resultPolyList,
176 std::vector<std::unique_ptr<LineString>>& resultLineList,
177 std::vector<std::unique_ptr<Point>>& resultPointList,
178 const GeometryFactory* geometryFactory);
180 static std::unique_ptr<Geometry> toLines(
OverlayGraph* graph,
bool isOutputEdges,
const GeometryFactory* geomFact);
199 const Geometry* geom0,
const Geometry* geom1,
200 int opCode,
const Geometry* result);
206 static bool round(
const Point* pt,
const PrecisionModel* pm, Coordinate& rsltCoord);
209 static void moveGeometry(std::vector<std::unique_ptr<T>>& inGeoms, std::vector<std::unique_ptr<Geometry>>& outGeoms)
211 static_assert(std::is_base_of<Geometry, T>::value,
"");
212 for (
auto&
geom: inGeoms) {
213 Geometry* outGeom =
static_cast<Geometry*
>(
geom.release());
214 outGeoms.emplace_back(outGeom);
The internal representation of a list of coordinates inside a Geometry.
Definition CoordinateSequence.h:56
Coordinate is the lightweight class used to store coordinates.
Definition Coordinate.h:217
An Envelope defines a rectangulare region of the 2D coordinate plane.
Definition Envelope.h:59
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition GeometryFactory.h:70
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition Geometry.h:196
Definition LineString.h:66
Represents a linear polygon, which may include holes.
Definition Polygon.h:61
Specifies the precision model of the Coordinate in a Geometry.
Definition PrecisionModel.h:87
Definition OverlayGraph.h:52
Definition OverlayUtil.h:54
static bool round(const Point *pt, const PrecisionModel *pm, Coordinate &rsltCoord)
static int resultDimension(int opCode, int dim0, int dim1)
static uint8_t resultCoordinateDimension(uint8_t coordDim0, uint8_t coordDim1)
static bool isEmptyResult(int opCode, const Geometry *a, const Geometry *b, const PrecisionModel *pm)
static bool isEnvDisjoint(const Geometry *a, const Geometry *b, const PrecisionModel *pm)
static bool isResultAreaConsistent(const Geometry *geom0, const Geometry *geom1, int opCode, const Geometry *result)
static std::unique_ptr< Geometry > createResultGeometry(std::vector< std::unique_ptr< Polygon > > &resultPolyList, std::vector< std::unique_ptr< LineString > > &resultLineList, std::vector< std::unique_ptr< Point > > &resultPointList, const GeometryFactory *geometryFactory)
static std::unique_ptr< Geometry > createEmptyResult(int dim, size_t coordDim, const GeometryFactory *geomFact)
static bool clippingEnvelope(int opCode, const InputGeometry *inputGeom, const PrecisionModel *pm, Envelope &rsltEnvelope)
Provides classes for implementing operations on geometries.
Definition CleanCoverage.h:34
Basic namespace for all GEOS functionalities.
Definition geos.h:38