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.