QGIS API Documentation 3.39.0-Master (47f7b3a4989)
Loading...
Searching...
No Matches
qgsalgorithmboundingbox.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsalgorithmboundingbox.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
19
21
22QString QgsBoundingBoxAlgorithm::name() const
23{
24 return QStringLiteral( "boundingboxes" );
25}
26
27QString QgsBoundingBoxAlgorithm::displayName() const
28{
29 return QObject::tr( "Bounding boxes" );
30}
31
32QStringList QgsBoundingBoxAlgorithm::tags() const
33{
34 return QObject::tr( "bounding,boxes,envelope,rectangle,extent" ).split( ',' );
35}
36
37QString QgsBoundingBoxAlgorithm::group() const
38{
39 return QObject::tr( "Vector geometry" );
40}
41
42QString QgsBoundingBoxAlgorithm::groupId() const
43{
44 return QStringLiteral( "vectorgeometry" );
45}
46
47QString QgsBoundingBoxAlgorithm::outputName() const
48{
49 return QObject::tr( "Bounds" );
50}
51
52QString QgsBoundingBoxAlgorithm::shortHelpString() const
53{
54 return QObject::tr( "This algorithm calculates the bounding box (envelope) for each feature in an input layer." ) +
55 QStringLiteral( "\n\n" ) +
56 QObject::tr( "See the 'Minimum bounding geometry' algorithm for a bounding box calculation which covers the whole layer or grouped subsets of features." );
57}
58
59QgsBoundingBoxAlgorithm *QgsBoundingBoxAlgorithm::createInstance() const
60{
61 return new QgsBoundingBoxAlgorithm();
62}
63
64QgsFields QgsBoundingBoxAlgorithm::outputFields( const QgsFields &inputFields ) const
65{
66 QgsFields fields = inputFields;
67 fields.append( QgsField( QStringLiteral( "width" ), QMetaType::Type::Double, QString(), 20, 6 ) );
68 fields.append( QgsField( QStringLiteral( "height" ), QMetaType::Type::Double, QString(), 20, 6 ) );
69 fields.append( QgsField( QStringLiteral( "area" ), QMetaType::Type::Double, QString(), 20, 6 ) );
70 fields.append( QgsField( QStringLiteral( "perimeter" ), QMetaType::Type::Double, QString(), 20, 6 ) );
71 return fields;
72}
73
74QgsFeatureList QgsBoundingBoxAlgorithm::processFeature( const QgsFeature &feature, QgsProcessingContext &, QgsProcessingFeedback * )
75{
76 QgsFeature f = feature;
77 if ( f.hasGeometry() )
78 {
79 const QgsRectangle bounds = f.geometry().boundingBox();
80 const QgsGeometry outputGeometry = QgsGeometry::fromRect( bounds );
81 f.setGeometry( outputGeometry );
82 QgsAttributes attrs = f.attributes();
83 attrs << bounds.width()
84 << bounds.height()
85 << bounds.area()
86 << bounds.perimeter();
87 f.setAttributes( attrs );
88 }
89 else
90 {
91 QgsAttributes attrs = f.attributes();
92 attrs << QVariant()
93 << QVariant()
94 << QVariant()
95 << QVariant();
96 f.setAttributes( attrs );
97 }
98 return QgsFeatureList() << f;
99}
100
A vector of attributes.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:58
QgsAttributes attributes
Definition qgsfeature.h:67
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes.
QgsGeometry geometry
Definition qgsfeature.h:69
bool hasGeometry() const
Returns true if the feature has an associated geometry.
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
Encapsulate a field in an attribute table or data source.
Definition qgsfield.h:53
Container of fields for a vector layer.
Definition qgsfields.h:46
bool append(const QgsField &field, Qgis::FieldOrigin origin=Qgis::FieldOrigin::Provider, int originIndex=-1)
Appends a field.
Definition qgsfields.cpp:60
A geometry is the spatial representation of a feature.
static QgsGeometry fromRect(const QgsRectangle &rect)
Creates a new geometry from a QgsRectangle.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
Contains information about the context in which a processing algorithm is executed.
Base class for providing feedback from a processing algorithm.
A rectangle specified with double values.
double area() const
Returns the area of the rectangle.
double width() const
Returns the width of the rectangle.
double perimeter() const
Returns the perimeter of the rectangle.
double height() const
Returns the height of the rectangle.
QList< QgsFeature > QgsFeatureList