QGIS API Documentation  3.6.0-Noosa (5873452)
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  };
48 
50  QgsMapToPixelSimplifier( int simplifyFlags, double tolerance, SimplifyAlgorithm simplifyAlgorithm = Distance );
51 
54  {
55  NoFlags = 0,
56  SimplifyGeometry = 1,
57  SimplifyEnvelope = 2,
58  };
59 
60  private:
62  static std::unique_ptr<QgsAbstractGeometry> simplifyGeometry( int simplifyFlags, SimplifyAlgorithm simplifyAlgorithm, const QgsAbstractGeometry &geometry, double map2pixelTol, bool isaLinearRing );
63 
64  protected:
67 
70 
72  double mTolerance;
73 
75  static float calculateLengthSquared2D( double x1, double y1, double x2, double y2 );
76 
78  static bool equalSnapToGrid( double x1, double y1, double x2, double y2, double gridOriginX, double gridOriginY, float gridInverseSizeXY );
79 
80  public:
82  int simplifyFlags() const { return mSimplifyFlags; }
84  void setSimplifyFlags( int simplifyFlags ) { mSimplifyFlags = simplifyFlags; }
85 
87  SimplifyAlgorithm simplifyAlgorithm() const { return mSimplifyAlgorithm; }
89  void setSimplifyAlgorithm( SimplifyAlgorithm simplifyAlgorithm ) { mSimplifyAlgorithm = simplifyAlgorithm; }
90 
92  QgsGeometry simplify( const QgsGeometry &geometry ) const override;
93 
95  void setTolerance( double value ) { mTolerance = value; }
96 
97  // MapToPixel simplification helper methods
98  public:
99 
101  static bool isGeneralizableByMapBoundingBox( const QgsRectangle &envelope, double map2pixelTol );
102 
104  inline bool isGeneralizableByMapBoundingBox( const QgsRectangle &envelope ) const
105  {
106  return isGeneralizableByMapBoundingBox( envelope, mTolerance );
107  }
108 };
109 
110 #endif // QGSMAPTOPIXELGEOMETRYSIMPLIFIER_H
A rectangle specified with double values.
Definition: qgsrectangle.h:41
void setSimplifyFlags(int simplifyFlags)
Sets the simplification hints of the vector layer managed.
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:106
SimplifyAlgorithm
Types of simplification algorithms that can be used.
SimplifyAlgorithm simplifyAlgorithm() const
Gets the local simplification algorithm of the vector layer managed.
int simplifyFlags() const
Gets the simplification hints of the vector layer managed.
Abstract base class for all geometries.
void setTolerance(double value)
Sets the tolerance of the vector layer managed.
Implementation of GeometrySimplifier using the "MapToPixel" algorithm.
double mTolerance
Distance tolerance for the simplification.
void setSimplifyAlgorithm(SimplifyAlgorithm simplifyAlgorithm)
Sets the local simplification algorithm of the vector layer managed.
int mSimplifyFlags
Current simplification flags.
SimplifyAlgorithm mSimplifyAlgorithm
Current algorithm.
virtual QgsGeometry simplify(const QgsGeometry &geometry) const =0
Returns a simplified version the specified geometry.
SimplifyFlag
Applicable simplification flags.
bool isGeneralizableByMapBoundingBox(const QgsRectangle &envelope) const
Returns whether the envelope can be replaced by its BBOX when is applied the specified map2pixel cont...
Abstract base class for simplify geometries using a specific algorithm.