QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
qgsmaptopixelgeometrysimplifier.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmaptopixelgeometrysimplifier.h
3  ---------------------
4  begin : December 2013
5  copyright : (C) 2013 by Alvaro Huarte
6  email : http://wiki.osgeo.org/wiki/Alvaro_Huarte
7 
8  ***************************************************************************
9  * *
10  * This program is free software; you can redistribute it and/or modify *
11  * it under the terms of the GNU General Public License as published by *
12  * the Free Software Foundation; either version 2 of the License, or *
13  * (at your option) any later version. *
14  * *
15  ***************************************************************************/
16 
17 #ifndef QGSMAPTOPIXELGEOMETRYSIMPLIFIER_H
18 #define QGSMAPTOPIXELGEOMETRYSIMPLIFIER_H
19 
20 #include "qgis_core.h"
21 #include "qgis_sip.h"
22 #include "qgsgeometrysimplifier.h"
23 #include <QPolygonF>
24 #include <memory>
25 
27 class QgsWkbPtr;
28 class QgsConstWkbPtr;
29 
30 
39 {
40  public:
43  {
44  Distance = 0,
45  SnapToGrid = 1,
46  Visvalingam = 2,
47  SnappedToGridGlobal = 3,
48  };
49 
51  QgsMapToPixelSimplifier( int simplifyFlags, double tolerance, SimplifyAlgorithm simplifyAlgorithm = Distance );
52 
55  {
56  NoFlags = 0,
57  SimplifyGeometry = 1,
58  SimplifyEnvelope = 2,
59  };
60 
61  private:
63  static std::unique_ptr<QgsAbstractGeometry> simplifyGeometry( int simplifyFlags, SimplifyAlgorithm simplifyAlgorithm, const QgsAbstractGeometry &geometry, double map2pixelTol, bool isaLinearRing );
64 
65  protected:
68 
71 
73  double mTolerance;
74 
76  static float calculateLengthSquared2D( double x1, double y1, double x2, double y2 );
77 
79  static bool equalSnapToGrid( double x1, double y1, double x2, double y2, double gridOriginX, double gridOriginY, float gridInverseSizeXY );
80 
81  public:
83  int simplifyFlags() const { return mSimplifyFlags; }
85  void setSimplifyFlags( int simplifyFlags ) { mSimplifyFlags = simplifyFlags; }
86 
88  SimplifyAlgorithm simplifyAlgorithm() const { return mSimplifyAlgorithm; }
90  void setSimplifyAlgorithm( SimplifyAlgorithm simplifyAlgorithm ) { mSimplifyAlgorithm = simplifyAlgorithm; }
91 
92  QgsGeometry simplify( const QgsGeometry &geometry ) const override;
93  QgsAbstractGeometry *simplify( const QgsAbstractGeometry *geometry ) const override SIP_FACTORY;
94 
96  void setTolerance( double value ) { mTolerance = value; }
97 
98  // MapToPixel simplification helper methods
99  public:
100 
102  static bool isGeneralizableByMapBoundingBox( const QgsRectangle &envelope, double map2pixelTol );
103 
105  inline bool isGeneralizableByMapBoundingBox( const QgsRectangle &envelope ) const
106  {
107  return isGeneralizableByMapBoundingBox( envelope, mTolerance );
108  }
109 };
110 
111 #endif // QGSMAPTOPIXELGEOMETRYSIMPLIFIER_H
Abstract base class for simplify geometries using a specific algorithm.
virtual QgsGeometry simplify(const QgsGeometry &geometry) const =0
Returns a simplified version the specified geometry.
Abstract base class for all geometries.
A const WKB pointer.
Definition: qgswkbptr.h:138
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:162
Implementation of GeometrySimplifier using the "MapToPixel" algorithm.
bool isGeneralizableByMapBoundingBox(const QgsRectangle &envelope) const
Returns whether the envelope can be replaced by its BBOX when is applied the specified map2pixel cont...
double mTolerance
Distance tolerance for the simplification.
SimplifyAlgorithm
Types of simplification algorithms that can be used.
int simplifyFlags() const
Gets the simplification hints of the vector layer managed.
void setSimplifyAlgorithm(SimplifyAlgorithm simplifyAlgorithm)
Sets the local simplification algorithm of the vector layer managed.
void setSimplifyFlags(int simplifyFlags)
Sets the simplification hints of the vector layer managed.
void setTolerance(double value)
Sets the tolerance of the vector layer managed.
SimplifyAlgorithm simplifyAlgorithm() const
Gets the local simplification algorithm of the vector layer managed.
SimplifyFlag
Applicable simplification flags.
int mSimplifyFlags
Current simplification flags.
SimplifyAlgorithm mSimplifyAlgorithm
Current algorithm.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
WKB pointer handler.
Definition: qgswkbptr.h:44
#define SIP_FACTORY
Definition: qgis_sip.h:76