QGIS API Documentation  3.0.2-Girona (307d082)
qgsalgorithmconvexhull.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsalgorithmconvexhull.cpp
3  ---------------------
4  begin : April 2017
5  copyright : (C) 2017 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "qgsalgorithmconvexhull.h"
19 
21 
22 QString QgsConvexHullAlgorithm::name() const
23 {
24  return QStringLiteral( "convexhull" );
25 }
26 
27 QString QgsConvexHullAlgorithm::displayName() const
28 {
29  return QObject::tr( "Convex hull" );
30 }
31 
32 QStringList QgsConvexHullAlgorithm::tags() const
33 {
34  return QObject::tr( "convex,hull,bounds,bounding" ).split( ',' );
35 }
36 
37 QString QgsConvexHullAlgorithm::group() const
38 {
39  return QObject::tr( "Vector geometry" );
40 }
41 
42 QString QgsConvexHullAlgorithm::groupId() const
43 {
44  return QStringLiteral( "vectorgeometry" );
45 }
46 
47 QString QgsConvexHullAlgorithm::outputName() const
48 {
49  return QObject::tr( "Convex hulls" );
50 }
51 
52 QString QgsConvexHullAlgorithm::shortHelpString() const
53 {
54  return QObject::tr( "This algorithm calculates the convex hull for each feature in an input layer." ) +
55  QStringLiteral( "\n\n" ) +
56  QObject::tr( "See the 'Minimum bounding geometry' algorithm for a convex hull calculation which covers the whole layer or grouped subsets of features." );
57 }
58 
59 QgsConvexHullAlgorithm *QgsConvexHullAlgorithm::createInstance() const
60 {
61  return new QgsConvexHullAlgorithm();
62 }
63 
64 QgsFields QgsConvexHullAlgorithm::outputFields( const QgsFields &inputFields ) const
65 {
66  QgsFields fields = inputFields;
67  fields.append( QgsField( QStringLiteral( "area" ), QVariant::Double, QString(), 20, 6 ) );
68  fields.append( QgsField( QStringLiteral( "perimeter" ), QVariant::Double, QString(), 20, 6 ) );
69  return fields;
70 }
71 
72 QgsFeatureList QgsConvexHullAlgorithm::processFeature( const QgsFeature &feature, QgsProcessingContext &, QgsProcessingFeedback *feedback )
73 {
74  QgsFeature f = feature;
75  if ( f.hasGeometry() )
76  {
77  QgsGeometry outputGeometry = f.geometry().convexHull();
78  if ( !outputGeometry )
79  feedback->reportError( outputGeometry.lastError() );
80  f.setGeometry( outputGeometry );
81  if ( outputGeometry )
82  {
83  QgsAttributes attrs = f.attributes();
84  attrs << outputGeometry.constGet()->area()
85  << outputGeometry.constGet()->perimeter();
86  f.setAttributes( attrs );
87  }
88  else
89  {
90  QgsAttributes attrs = f.attributes();
91  attrs << QVariant()
92  << QVariant();
93  f.setAttributes( attrs );
94  }
95  }
96  return QgsFeatureList() << f;
97 }
98 
100 
Base class for providing feedback from a processing algorithm.
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:549
Container of fields for a vector layer.
Definition: qgsfields.h:42
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:111
void setAttributes(const QgsAttributes &attrs)
Sets the feature&#39;s attributes.
Definition: qgsfeature.cpp:127
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:62
bool hasGeometry() const
Returns true if the feature has an associated geometry.
Definition: qgsfeature.cpp:190
QgsGeometry convexHull() const
Returns the smallest convex polygon that contains all the points in the geometry. ...
bool append(const QgsField &field, FieldOrigin origin=OriginProvider, int originIndex=-1)
Append a field. The field must have unique name, otherwise it is rejected (returns false) ...
Definition: qgsfields.cpp:59
virtual double area() const
Returns the area of the geometry.
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:48
QgsGeometry geometry() const
Returns the geometry associated with this feature.
Definition: qgsfeature.cpp:101
const QgsAbstractGeometry * constGet() const
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
QString lastError() const
Returns an error string referring to the last error encountered either when this geometry was created...
virtual double perimeter() const
Returns the perimeter of the geometry.
void setGeometry(const QgsGeometry &geometry)
Set the feature&#39;s geometry.
Definition: qgsfeature.cpp:137
A vector of attributes.
Definition: qgsattributes.h:58
Contains information about the context in which a processing algorithm is executed.
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
QgsAttributes attributes
Definition: qgsfeature.h:72