QGIS API Documentation  2.99.0-Master (37c43df)
qgsgeometrysimplifier.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsgeometrysimplifier.cpp
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 #include <limits>
18 #include "qgsgeometrysimplifier.h"
19 #include "qgsrectangle.h"
20 #include "qgsgeometry.h"
21 
23 {
24 }
25 
28 {
29  return ( envelope.xMaximum() - envelope.xMinimum() ) < mapToPixelTol && ( envelope.yMaximum() - envelope.yMinimum() ) < mapToPixelTol;
30 }
31 
33 bool QgsAbstractGeometrySimplifier::isGeneralizableByDeviceBoundingBox( const QVector<QPointF>& points, float mapToPixelTol )
34 {
35  QgsRectangle r;
36  r.setMinimal();
37 
38  for ( int i = 0, numPoints = points.size(); i < numPoints; ++i )
39  {
40  r.combineExtentWith( points[i].x(), points[i].y() );
41  }
42  return isGeneralizableByDeviceBoundingBox( r, mapToPixelTol );
43 }
44 
45 /***************************************************************************/
46 
50 QgsTopologyPreservingSimplifier::QgsTopologyPreservingSimplifier( double tolerance ) : mTolerance( tolerance )
51 {
52 }
54 {
55 }
56 
59 {
60  return geometry.simplify( mTolerance );
61 }
62 
A rectangle specified with double values.
Definition: qgsrectangle.h:35
void setMinimal()
Set a rectangle so that min corner is at max and max corner is at min.
static bool isGeneralizableByDeviceBoundingBox(const QVector< QPointF > &points, float mapToPixelTol=1.0f)
Returns whether the device-geometry can be replaced by its BBOX when is applied the specified toleran...
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:78
double mTolerance
Distance tolerance for the simplification.
double yMinimum() const
Get the y minimum value (bottom side of rectangle)
Definition: qgsrectangle.h:206
double xMaximum() const
Get the x maximum value (right side of rectangle)
Definition: qgsrectangle.h:191
void combineExtentWith(const QgsRectangle &rect)
expand the rectangle so that covers both the original rectangle and the given rectangle ...
virtual QgsGeometry simplify(const QgsGeometry &geometry) const override
Returns a simplified version the specified geometry.
QgsGeometry simplify(double tolerance) const
Returns a simplified version of this geometry using a specified tolerance value.
double xMinimum() const
Get the x minimum value (left side of rectangle)
Definition: qgsrectangle.h:196
QgsTopologyPreservingSimplifier(double tolerance)
Implementation of GeometrySimplifier using the Douglas-Peucker algorithm.
double yMaximum() const
Get the y maximum value (top side of rectangle)
Definition: qgsrectangle.h:201
static bool isGeneralizableByDeviceBoundingBox(const QgsRectangle &envelope, float mapToPixelTol=1.0f)
Returns whether the device-envelope can be replaced by its BBOX when is applied the specified toleran...