QGIS API Documentation  2.2.0-Valmiera
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 *
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 "qgsgeometry.h"
21 #include "qgscoordinatetransform.h"
22 #include "qgsmaptopixel.h"
23
24 #include "qgsgeometrysimplifier.h"
25
33 {
34  public:
35  QgsMapToPixelSimplifier( int simplifyFlags, double tolerance );
36  virtual ~QgsMapToPixelSimplifier();
37
40  {
41  NoFlags = 0,
42  SimplifyGeometry = 1,
43  SimplifyEnvelope = 2,
44  };
45
46  private:
48  static bool simplifyWkbGeometry( int simplifyFlags, QGis::WkbType wkbType, unsigned char* sourceWkb, size_t sourceWkbSize, unsigned char* targetWkb, size_t& targetWkbSize, const QgsRectangle& envelope, double map2pixelTol, bool writeHeader = true, bool isaLinearRing = false );
49
50  protected:
53
55  double mTolerance;
56
58  static float calculateLengthSquared2D( double x1, double y1, double x2, double y2 );
59
60  public:
61  int simplifyFlags() const { return mSimplifyFlags; }
62  void setSimplifyFlags( int simplifyFlags ) { mSimplifyFlags = simplifyFlags; }
63
65  virtual QgsGeometry* simplify( QgsGeometry* geometry ) const;
67  virtual bool simplifyGeometry( QgsGeometry* geometry ) const;
68
69  // MapToPixel simplification helper methods
70  public:
71
73  static bool canbeGeneralizedByMapBoundingBox( const QgsRectangle& envelope, double map2pixelTol );
74
76  inline bool canbeGeneralizedByMapBoundingBox( const QgsRectangle& envelope ) const { return canbeGeneralizedByMapBoundingBox( envelope, mTolerance ); }
77
79  static bool simplifyGeometry( QgsGeometry* geometry, int simplifyFlags, double tolerance );
80
81 };
82
83 #endif // QGSMAPTOPIXELGEOMETRYSIMPLIFIER_H