17#ifndef QGS_GEOMETRYCHECKERUTILS_H
18#define QGS_GEOMETRYCHECKERUTILS_H
20#include "qgis_analysis.h"
72 QPointer<QgsVectorLayer> layer()
const SIP_SKIP;
77 QString layerId()
const;
96 bool useMapCrs()
const;
120 LayerFeatures(
const QMap<QString, QgsFeaturePool *> &featurePools,
121 const QMap<QString, QgsFeatureIds> &featureIds,
122 const QList<QgsWkbTypes::GeometryType> &geometryTypes,
125 bool useMapCrs =
false );
130 LayerFeatures(
const QMap<QString, QgsFeaturePool *> &featurePools,
131 const QList<QString> &layerIds,
const QgsRectangle &extent,
132 const QList<QgsWkbTypes::GeometryType> &geometryTypes,
176 bool nextLayerFeature(
bool begin );
177 bool nextLayer(
bool begin );
178 bool nextFeature(
bool begin );
179 QList<QString>::const_iterator mLayerIt;
180 QgsFeatureIds::const_iterator mFeatureIt;
182 std::unique_ptr<QgsGeometryCheckerUtils::LayerFeature> mCurrentFeature;
203 QMap<QString, QgsFeaturePool *> mFeaturePools;
204 QMap<QString, QgsFeatureIds> mFeatureIds;
205 QList<QString> mLayerIds;
207 QList<QgsWkbTypes::GeometryType> mGeometryTypes;
210 bool mUseMapCrs =
true;
215 static std::unique_ptr<QgsGeometryEngine> createGeomEngine(
const QgsAbstractGeometry *geometry,
double tolerance );
220 static QList <const QgsLineString *> polygonRings(
const QgsPolygon *polygon );
232 const int nVerts = geom->
vertexCount( iPart, iRing );
235 const bool closed = back == front;
238 return closed ? nVerts - 1 : nVerts;
248 static bool pointOnLine(
const QgsPoint &p,
const QgsLineString *line,
double tol,
bool excludeExtremities =
false );
263 double dx = p1.
x() - p2.
x(), dy = p1.
y() - p2.
y();
264 return ( dx * dx + dy * dy ) < tol * tol;
269 const int nVerts = geom->
vertexCount( iPart, iRing );
272 const bool closed = back == front;
273 return closed ? nVerts > 4 : nVerts > 2;
Abstract base class for all geometries.
virtual int vertexCount(int part=0, int ring=0) const =0
Returns the number of vertices of which this geometry is built.
virtual QgsPoint vertexAt(QgsVertexId id) const =0
Returns the point corresponding to a specified vertex id.
virtual bool isEmpty() const
Returns true if the geometry is empty.
A feature pool is based on a vector layer and caches features.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Base configuration for geometry checks.
A layer feature combination to uniquely identify and access a feature in a set of layers.
An iterator over all features in a QgsGeometryCheckerUtils::LayerFeatures.
Contains a set of layers and feature ids in those layers to pass to a geometry check.
Contains utilities required for geometry checks.
static bool canDeleteVertex(const QgsAbstractGeometry *geom, int iPart, int iRing)
static int polyLineSize(const QgsAbstractGeometry *geom, int iPart, int iRing, bool *isClosed=nullptr)
Returns the number of points in a polyline, accounting for duplicate start and end point if the polyl...
static bool pointsFuzzyEqual(const QgsPointXY &p1, const QgsPointXY &p2, double tol)
Determine whether two points are equal up to the specified tolerance.
A geometry engine is a low-level representation of a QgsAbstractGeometry object, optimised for use wi...
A geometry is the spatial representation of a feature.
Line string geometry type, with support for z-dimension and m-values.
A class to represent a 2D point.
Point geometry type, with support for z-dimension and m-values.
A rectangle specified with double values.
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
QgsMargins operator*(const QgsMargins &margins, double factor)
Returns a QgsMargins object that is formed by multiplying each component of the given margins by fact...
Utility class for identifying a unique vertex within a geometry.