QGIS API Documentation  2.8.2-Wien
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 
21 {
22 }
23 
26 {
27  return ( envelope.xMaximum() - envelope.xMinimum() ) < mapToPixelTol && ( envelope.yMaximum() - envelope.yMinimum() ) < mapToPixelTol;
28 }
29 
31 bool QgsAbstractGeometrySimplifier::isGeneralizableByDeviceBoundingBox( const QVector<QPointF>& points, float mapToPixelTol )
32 {
33  QgsRectangle r;
34  r.setMinimal();
35 
36  for ( int i = 0, numPoints = points.size(); i < numPoints; ++i )
37  {
38  r.combineExtentWith( points[i].x(), points[i].y() );
39  }
40  return isGeneralizableByDeviceBoundingBox( r, mapToPixelTol );
41 }
42 
43 /***************************************************************************/
47 QgsTopologyPreservingSimplifier::QgsTopologyPreservingSimplifier( double tolerance ) : mTolerance( tolerance )
48 {
49 }
51 {
52 }
53 
56 {
57  return geometry->simplify( mTolerance );
58 }
59 
62 {
63  QgsGeometry* g = geometry->simplify( mTolerance );
64 
65  if ( g )
66  {
67  size_t wkbSize = g->wkbSize();
68  unsigned char* wkb = ( unsigned char* )malloc( wkbSize );
69  memcpy( wkb, g->asWkb(), wkbSize );
70  geometry->fromWkb( wkb, wkbSize );
71  delete g;
72 
73  return true;
74  }
75  return false;
76 }