177 void geometryChanged()
override;
178 void prepareGeometry()
override;
187 std::unique_ptr< QgsAbstractGeometry > clip(
const QgsRectangle &rectangle, QString *errorMsg =
nullptr )
const;
212 QgsAbstractGeometry *buffer(
double distance,
int segments, QString *errorMsg =
nullptr )
const override;
214 QgsAbstractGeometry *simplify(
double tolerance, QString *errorMsg =
nullptr )
const override;
215 QgsAbstractGeometry *interpolate(
double distance, QString *errorMsg =
nullptr )
const override;
217 QgsPoint *centroid( QString *errorMsg =
nullptr )
const override;
218 QgsPoint *pointOnSurface( QString *errorMsg =
nullptr )
const override;
220 double distance(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const override;
221 bool distanceWithin(
const QgsAbstractGeometry *geom,
double maxdistance, QString *errorMsg =
nullptr )
const override;
230 bool contains(
double x,
double y, QString *errorMsg =
nullptr )
const;
239 double distance(
double x,
double y, QString *errorMsg =
nullptr )
const;
255 double hausdorffDistance(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const;
272 double hausdorffDistanceDensify(
const QgsAbstractGeometry *geom,
double densifyFraction, QString *errorMsg =
nullptr )
const;
286 double frechetDistance(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const;
310 double frechetDistanceDensify(
const QgsAbstractGeometry *geom,
double densifyFraction, QString *errorMsg =
nullptr )
const;
312 bool intersects(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const override;
313 bool touches(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const override;
314 bool crosses(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const override;
315 bool within(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const override;
316 bool overlaps(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const override;
317 bool contains(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const override;
318 bool disjoint(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const override;
319 QString relate(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const override;
320 bool relatePattern(
const QgsAbstractGeometry *geom,
const QString &pattern, QString *errorMsg =
nullptr )
const override;
321 double area( QString *errorMsg =
nullptr )
const override;
322 double length( QString *errorMsg =
nullptr )
const override;
323 bool isValid( QString *errorMsg =
nullptr,
bool allowSelfTouchingHoles =
false,
QgsGeometry *errorLoc =
nullptr )
const override;
324 bool isEqual(
const QgsAbstractGeometry *geom, QString *errorMsg =
nullptr )
const override;
325 bool isEmpty( QString *errorMsg =
nullptr )
const override;
326 bool isSimple( QString *errorMsg =
nullptr )
const override;
329 QVector<QgsGeometry> &newGeometries,
332 QString *errorMsg =
nullptr,
bool skipIntersectionCheck =
false )
const override;
348 std::unique_ptr< QgsAbstractGeometry > singleSidedBuffer(
double distance,
int segments,
Qgis::BufferSide side,
350 QString *errorMsg =
nullptr )
const;
376 std::unique_ptr< QgsAbstractGeometry > maximumInscribedCircle(
double tolerance, QString *errorMsg =
nullptr )
const;
401 std::unique_ptr< QgsAbstractGeometry > largestEmptyCircle(
double tolerance,
const QgsAbstractGeometry *boundary =
nullptr, QString *errorMsg =
nullptr )
const;
417 std::unique_ptr< QgsAbstractGeometry > minimumWidth( QString *errorMsg =
nullptr )
const;
440 double minimumClearance( QString *errorMsg =
nullptr )
const;
453 std::unique_ptr< QgsAbstractGeometry > minimumClearanceLine( QString *errorMsg =
nullptr )
const;
465 std::unique_ptr< QgsAbstractGeometry > node( QString *errorMsg =
nullptr )
const;
481 std::unique_ptr< QgsAbstractGeometry > sharedPaths(
const QgsAbstractGeometry *other, QString *errorMsg =
nullptr )
const;
500 QgsGeometry mergeLines( QString *errorMsg =
nullptr )
const;
531 double lineLocatePoint(
const QgsPoint &point, QString *errorMsg =
nullptr )
const;
545 double lineLocatePoint(
double x,
double y, QString *errorMsg =
nullptr )
const;
555 static QgsGeometry polygonize(
const QVector<const QgsAbstractGeometry *> &geometries, QString *errorMsg =
nullptr );
571 QgsGeometry voronoiDiagram(
const QgsAbstractGeometry *extent =
nullptr,
double tolerance = 0.0,
bool edgesOnly =
false, QString *errorMsg =
nullptr )
const;
582 QgsGeometry delaunayTriangulation(
double tolerance = 0.0,
bool edgesOnly =
false, QString *errorMsg =
nullptr )
const;
596 std::unique_ptr< QgsAbstractGeometry > constrainedDelaunayTriangulation( QString *errorMsg =
nullptr )
const;
619 QgsAbstractGeometry *concaveHull(
double targetPercent,
bool allowHoles =
false, QString *errorMsg =
nullptr )
const;
640 Qgis::CoverageValidityResult validateCoverage(
double gapWidth, std::unique_ptr< QgsAbstractGeometry > *invalidEdges, QString *errorMsg =
nullptr )
const;
663 std::unique_ptr< QgsAbstractGeometry > simplifyCoverageVW(
double tolerance,
bool preserveBoundary, QString *errorMsg =
nullptr )
const;
676 std::unique_ptr< QgsAbstractGeometry > unionCoverage( QString *errorMsg =
nullptr )
const;
682 static std::unique_ptr< QgsAbstractGeometry > fromGeos(
const GEOSGeometry *
geos );
683 static std::unique_ptr< QgsPolygon > fromGeosPolygon(
const GEOSGeometry *
geos );
700 static QgsPoint coordSeqPoint(
const GEOSCoordSequence *cs,
int i,
bool hasZ,
bool hasM );
703 mutable geos::unique_ptr mGeos;
704 geos::prepared_unique_ptr mGeosPrepared;
705 double mPrecision = 0.0;
727 void cacheGeos(
bool allowInvalidSubGeom )
const;
737 bool relation(
const QgsAbstractGeometry *geom, Relation r, QString *errorMsg =
nullptr )
const;
738 static GEOSCoordSequence *createCoordinateSequence(
const QgsCurve *curve,
double precision,
bool forceClose =
false );
739 static std::unique_ptr< QgsLineString > sequenceToLinestring(
const GEOSGeometry *
geos,
bool hasZ,
bool hasM );
742 int mergeGeometriesMultiTypeSplit( std::vector<geos::unique_ptr> &splitResult )
const;
747 static geos::unique_ptr createGeosCollection(
int typeId, std::vector<geos::unique_ptr> &geoms );
749 static geos::unique_ptr createGeosPointXY(
double x,
double y,
bool hasZ,
double z,
bool hasM,
double m,
int coordDims,
double precision );
756 geos::unique_ptr linePointDifference(
GEOSGeometry *GEOSsplitPoint )
const;
Used to create and store a proj context object, correctly freeing the context upon destruction.
static GEOSContextHandle_t get()
Returns a thread local instance of a GEOS context, safe for use in the current thread.