16#ifndef QGSGEOMETRYENGINE_H
17#define QGSGEOMETRYENGINE_H
27using namespace Qt::StringLiterals;
83 if (
dynamic_cast< QgsGeos *
>( sipCpp ) != NULL )
84 sipType = sipType_QgsGeos;
355 virtual double area( QString *errorMsg =
nullptr )
const = 0;
356 virtual double length( QString *errorMsg =
nullptr )
const = 0;
371 virtual bool isValid( QString *errorMsg =
nullptr,
bool allowSelfTouchingHoles =
false,
QgsGeometry *errorLoc =
nullptr,
QgsFeedback *feedback =
nullptr )
const = 0;
394 virtual bool isEmpty( QString *errorMsg )
const = 0;
399 virtual bool isSimple( QString *errorMsg =
nullptr )
const = 0;
413 const QgsLineString &splitLine, QVector<QgsGeometry > &newGeometries
SIP_OUT,
bool topological,
QgsPointSequence &topologyTestPoints, QString *errorMsg =
nullptr,
bool skipIntersectionCheck =
false
416 Q_UNUSED( splitLine )
417 Q_UNUSED( newGeometries )
418 Q_UNUSED( topological )
419 Q_UNUSED( topologyTestPoints )
421 Q_UNUSED( skipIntersectionCheck )
454 void logError(
const QString &engineName,
const QString &message )
const
458 QgsDebugError( u
"%1 notice: %2"_s.arg( engineName, message ) );
459 qWarning(
"%s exception: %s", engineName.toLocal8Bit().constData(), message.toLocal8Bit().constData() );
JoinStyle
Join styles for buffers.
EndCapStyle
End cap styles for buffers.
Abstract base class for all geometries.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
virtual double area(QString *errorMsg=nullptr) const =0
virtual ~QgsGeometryEngine()=default
virtual bool isFuzzyEqual(const QgsAbstractGeometry *geom, double epsilon, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Checks if this is equal to geom ie.
virtual QgsGeometryEngine::EngineOperationResult splitGeometry(const QgsLineString &splitLine, QVector< QgsGeometry > &newGeometries, bool topological, QgsPointSequence &topologyTestPoints, QString *errorMsg=nullptr, bool skipIntersectionCheck=false) const
Splits this geometry according to a given line.
virtual void geometryChanged()=0
Should be called whenever the geometry associated with the engine has been modified and the engine mu...
virtual bool overlaps(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Checks if geom overlaps this.
virtual QgsAbstractGeometry * intersection(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, const QgsGeometryParameters ¶meters=QgsGeometryParameters(), QgsFeedback *feedback=nullptr) const =0
Calculate the intersection of this and geom.
virtual bool isEqual(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Check if geometries are topologically equivalent.
virtual double distance(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Calculates the distance between this and geom.
virtual QgsAbstractGeometry * symDifference(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, const QgsGeometryParameters ¶meters=QgsGeometryParameters(), QgsFeedback *feedback=nullptr) const =0
Calculate the symmetric difference of this and geom.
virtual QgsAbstractGeometry * simplify(double tolerance, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Simplifies the geometery.
const QgsAbstractGeometry * mGeometry
virtual bool crosses(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Checks if geom crosses this.
virtual QgsAbstractGeometry * combine(const QVector< QgsGeometry > &geometries, QString *errorMsg=nullptr, const QgsGeometryParameters ¶meters=QgsGeometryParameters(), QgsFeedback *feedback=nullptr) const =0
Calculate the combination of this and geometries.
virtual QgsAbstractGeometry * difference(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, const QgsGeometryParameters ¶meters=QgsGeometryParameters(), QgsFeedback *feedback=nullptr) const =0
Calculate the difference of this and geom.
virtual QgsPoint * centroid(QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Calculates the centroid of this.
void setLogErrors(bool enabled)
Sets whether warnings and errors encountered during the geometry operations should be logged.
virtual QgsAbstractGeometry * buffer(double distance, int segments, Qgis::EndCapStyle endCapStyle, Qgis::JoinStyle joinStyle, double miterLimit, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Buffers a geometry.
virtual QgsAbstractGeometry * convexHull(QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Calculate the convex hull of this geometry.
virtual QgsAbstractGeometry * buffer(double distance, int segments, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Buffers the geometry.
virtual QgsAbstractGeometry * envelope(QString *errorMsg=nullptr) const =0
EngineOperationResult
Success or failure of a geometry operation.
@ NothingHappened
Nothing happened, without any error.
@ InvalidBaseGeometry
The geometry on which the operation occurs is not valid.
@ InvalidInput
The input is not valid.
@ NodedGeometryError
Error occurred while creating a noded geometry.
@ EngineError
Error occurred in the geometry engine.
@ SplitCannotSplitPoint
Points cannot be split.
@ Success
Operation succeeded.
@ MethodNotImplemented
Method not implemented in geometry engine.
virtual bool relatePattern(const QgsAbstractGeometry *geom, const QString &pattern, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Tests whether two geometries are related by a specified Dimensional Extended 9 Intersection Model (DE...
virtual bool isEmpty(QString *errorMsg) const =0
virtual QgsAbstractGeometry * interpolate(double distance, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Interpolates a point by distance along the geometry.
virtual bool within(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Checks if geom is within this.
QgsGeometryEngine(const QgsAbstractGeometry *geometry)
virtual bool isSimple(QString *errorMsg=nullptr) const =0
Determines whether the geometry is simple (according to OGC definition).
virtual bool intersects(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Checks if geom intersects this.
virtual bool disjoint(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Checks if geom is disjoint from this.
virtual QgsAbstractGeometry * combine(const QVector< QgsAbstractGeometry * > &geomList, QString *errorMsg, const QgsGeometryParameters ¶meters=QgsGeometryParameters(), QgsFeedback *feedback=nullptr) const =0
Calculate the combination of this and geometries.
virtual bool isValid(QString *errorMsg=nullptr, bool allowSelfTouchingHoles=false, QgsGeometry *errorLoc=nullptr, QgsFeedback *feedback=nullptr) const =0
Returns true if the geometry is valid.
virtual bool contains(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Checks if geom contains this.
virtual bool distanceWithin(const QgsAbstractGeometry *geom, double maxdistance, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Checks if geom is within maxdistance distance from this geometry.
virtual void prepareGeometry()=0
Prepares the geometry, so that subsequent calls to spatial relation methods are much faster.
virtual QgsPoint * pointOnSurface(QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Calculate a point that is guaranteed to be on the surface of this.
virtual double length(QString *errorMsg=nullptr) const =0
virtual bool touches(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Checks if geom touches this.
virtual QgsAbstractGeometry * offsetCurve(double distance, int segments, Qgis::JoinStyle joinStyle, double miterLimit, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Offsets a curve.
void logError(const QString &engineName, const QString &message) const
Logs an error message encountered during an operation.
virtual QgsAbstractGeometry * combine(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, const QgsGeometryParameters ¶meters=QgsGeometryParameters(), QgsFeedback *feedback=nullptr) const =0
Calculate the combination of this and geom.
virtual QString relate(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, QgsFeedback *feedback=nullptr) const =0
Returns the Dimensional Extended 9 Intersection Model (DE-9IM) representation of the relationship bet...
Encapsulates parameters under which a geometry operation is performed.
A geometry is the spatial representation of a feature.
Does vector analysis using the GEOS library and handles import, export, and exception handling.
Line string geometry type, with support for z-dimension and m-values.
Point geometry type, with support for z-dimension and m-values.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
QVector< QgsPoint > QgsPointSequence
#define QgsDebugError(str)