QGIS API Documentation 4.1.0-Master (60fea48833c)
Loading...
Searching...
No Matches
qgsfeaturerequest.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsfeaturerequest.h
3 ---------------------
4 begin : Mai 2012
5 copyright : (C) 2012 by Martin Dobias
6 email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15#ifndef QGSFEATUREREQUEST_H
16#define QGSFEATUREREQUEST_H
17
18#include <memory>
19
20#include "qgis.h"
21#include "qgis_core.h"
22#include "qgis_sip.h"
26#include "qgsexpression.h"
28#include "qgsfeature.h"
29#include "qgsrectangle.h"
30#include "qgssimplifymethod.h"
31
32#include <QFlags>
33#include <QList>
34
84class CORE_EXPORT QgsFeatureRequest
85{
86 public:
109 class CORE_EXPORT OrderByClause
110 {
111 public:
120 OrderByClause( const QString &expression, bool ascending = true );
121
129 OrderByClause( const QString &expression, bool ascending, bool nullsfirst );
130
139 OrderByClause( const QgsExpression &expression, bool ascending = true );
140
148 OrderByClause( const QgsExpression &expression, bool ascending, bool nullsfirst );
149
155
162 bool prepare( QgsExpressionContext *context );
163
168 bool ascending() const;
169
173 void setAscending( bool ascending );
174
179 bool nullsFirst() const;
180
184 void setNullsFirst( bool nullsFirst );
185
189 QString dump() const;
190
191 // friend inline int qHash(const OrderByClause &a) { return qHash(a.mExpression.expression()) ^ qHash(a.mAscending) ^ qHash( a.mNullsFirst); }
192
193 bool operator==( const OrderByClause &v ) const { return mExpression == v.mExpression && mAscending == v.mAscending && mNullsFirst == v.mNullsFirst; }
194
195 bool operator!=( const OrderByClause &v ) const { return !( v == *this ); }
196
197 private:
198 QgsExpression mExpression;
199 bool mAscending;
200 bool mNullsFirst;
201 };
202
203
210 class OrderBy : public QList<QgsFeatureRequest::OrderByClause>
211 {
212 public:
216 CORE_EXPORT OrderBy();
217
221 CORE_EXPORT OrderBy( const QList<QgsFeatureRequest::OrderByClause> &other );
222
227 CORE_EXPORT bool operator==( const OrderBy &v ) const;
228
233 CORE_EXPORT bool operator!=( const OrderBy &v ) const;
234
241 QList<QgsFeatureRequest::OrderByClause> CORE_EXPORT list() const;
242
246 void CORE_EXPORT save( QDomElement &elem ) const;
247
251 void CORE_EXPORT load( const QDomElement &elem );
252
257 QSet<QString> CORE_EXPORT usedAttributes() const;
258
263 QSet<int> CORE_EXPORT usedAttributeIndices( const QgsFields &fields ) const;
264
268 QString CORE_EXPORT dump() const;
269 };
270
274 static const QString ALL_ATTRIBUTES;
275
279 explicit QgsFeatureRequest( QgsFeatureId fid );
281 explicit QgsFeatureRequest( const QgsFeatureIds &fids );
282
290 explicit QgsFeatureRequest( const QgsRectangle &rectangle );
291
293 explicit QgsFeatureRequest( const QgsExpression &expr, const QgsExpressionContext &context = QgsExpressionContext() );
298
305 bool compare( const QgsFeatureRequest &other ) const;
306
308
321
335
348 QgsFeatureRequest &setFilterRect( const QgsRectangle &rectangle );
349
365 QgsRectangle filterRect() const;
366
382 QgsFeatureRequest &setDistanceWithin( const QgsGeometry &geometry, double distance );
383
399
408 std::shared_ptr< QgsGeometryEngine > referenceGeometryEngine() const SIP_SKIP { return mReferenceGeometryEngine; }
409
421 double distanceWithin() const { return mDistanceWithin; }
422
431 QgsFeatureRequest &setFilterFid( QgsFeatureId fid );
432
440
449 QgsFeatureRequest &setFilterFids( const QgsFeatureIds &fids );
450
457 const QgsFeatureIds &filterFids() const { return mFilterFids; }
458
465 QgsFeatureRequest &setInvalidGeometryCheck( Qgis::InvalidGeometryCheck check );
466
472
479#ifndef SIP_RUN
480 QgsFeatureRequest &setInvalidGeometryCallback( const std::function< void( const QgsFeature & )> &callback );
481#else
482 // clang-format off
483 QgsFeatureRequest &setInvalidGeometryCallback( SIP_PYCALLABLE / AllowNone / );
484 % MethodCode
485 Py_BEGIN_ALLOW_THREADS
486
487 sipCpp->setInvalidGeometryCallback( [a0]( const QgsFeature &arg )
488 {
489 SIP_BLOCK_THREADS
490 Py_XDECREF( sipCallMethod( NULL, a0, "D", &arg, sipType_QgsFeature, NULL ) );
491 SIP_UNBLOCK_THREADS
492 } );
493
494 sipRes = sipCpp;
495
496 Py_END_ALLOW_THREADS
497 % End
498// clang-format on
499#endif
500
507 std::function< void( const QgsFeature & ) > invalidGeometryCallback() const SIP_SKIP { return mInvalidGeometryCallback; }
508
518 QgsFeatureRequest &setFilterExpression( const QString &expression );
519
526
535 QgsFeatureRequest &combineFilterExpression( const QString &expression );
536
543
549 QgsFeatureRequest &setExpressionContext( const QgsExpressionContext &context );
550
567
577
578 QgsFeatureRequest &addOrderBy( const QString &expression, bool ascending = true );
579
588 QgsFeatureRequest &addOrderBy( const QString &expression, bool ascending, bool nullsfirst );
589
594 OrderBy orderBy() const;
595
600 QgsFeatureRequest &setOrderBy( const OrderBy &orderBy );
601
607 QgsFeatureRequest &setLimit( long long limit );
608
613#ifndef SIP_RUN
614 long long limit() const { return mLimit; }
615#else
616 long long limit() const;
617#endif
618
625
632
649 QgsFeatureRequest &setSubsetOfAttributes( const QgsAttributeList &attrs );
650
666 QgsFeatureRequest &setNoAttributes();
667
682
694 QgsFeatureRequest &setSubsetOfAttributes( const QStringList &attrNames, const QgsFields &fields );
695
707 QgsFeatureRequest &setSubsetOfAttributes( const QSet<QString> &attrNames, const QgsFields &fields );
708
714 QgsFeatureRequest &setSimplifyMethod( const QgsSimplifyMethod &simplifyMethod );
715
722
735 QgsCoordinateTransform coordinateTransform() const;
736
750 QgsCoordinateReferenceSystem destinationCrs() const;
751
758 QgsCoordinateTransformContext transformContext() const;
759
769 QgsCoordinateTransform calculateTransform( const QgsCoordinateReferenceSystem &sourceCrs ) const;
770
801 QgsFeatureRequest &setCoordinateTransform( const QgsCoordinateTransform &transform );
802
829 QgsFeatureRequest &setDestinationCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context );
830
838#ifndef SIP_RUN
839 QgsFeatureRequest &setTransformErrorCallback( const std::function< void( const QgsFeature & )> &callback );
840#else
841 // clang-format off
842 QgsFeatureRequest &setTransformErrorCallback( SIP_PYCALLABLE / AllowNone / );
843 % MethodCode
844 Py_BEGIN_ALLOW_THREADS
845
846 sipCpp->setTransformErrorCallback( [a0]( const QgsFeature &arg )
847 {
848 SIP_BLOCK_THREADS
849 Py_XDECREF( sipCallMethod( NULL, a0, "D", &arg, sipType_QgsFeature, NULL ) );
850 SIP_UNBLOCK_THREADS
851 } );
852
853 sipRes = sipCpp;
854
855 Py_END_ALLOW_THREADS
856 % End
857// clang-format on
858#endif
859
867 std::function< void( const QgsFeature & ) > transformErrorCallback() const SIP_SKIP { return mTransformErrorCallback; }
868
869
878 bool acceptFeature( const QgsFeature &feature );
879
888 Q_DECL_DEPRECATED int connectionTimeout() const SIP_DEPRECATED;
889
898 Q_DECL_DEPRECATED QgsFeatureRequest &setConnectionTimeout( int connectionTimeout ) SIP_DEPRECATED;
899
909 int timeout() const;
910
920 QgsFeatureRequest &setTimeout( int timeout );
921
935 bool requestMayBeNested() const;
936
950 QgsFeatureRequest &setRequestMayBeNested( bool requestMayBeNested );
951
963 void setFeedback( QgsFeedback *feedback );
964
973 QgsFeedback *feedback() const;
974
975 protected:
979 Qgis::FeatureRequestFilterType mFilter = Qgis::FeatureRequestFilterType::NoFilter;
980
986 Qgis::SpatialFilterType mSpatialFilter = Qgis::SpatialFilterType::NoFilter;
987
992
997
1002
1007
1012 Qgis::FeatureRequestFlags mFlags;
1015 long long mLimit = -1;
1017 Qgis::InvalidGeometryCheck mInvalidGeometryFilter = Qgis::InvalidGeometryCheck::NoCheck;
1018 std::function< void( const QgsFeature & ) > mInvalidGeometryCallback;
1019 std::function< void( const QgsFeature & ) > mTransformErrorCallback;
1023 int mTimeout = -1;
1026};
1027
1028
1029class QgsFeatureIterator;
1031
1037{
1038 public:
1039 virtual ~QgsAbstractFeatureSource();
1040
1041
1042 // IMPORTANT -- do NOT remove the /TransferBack/ annotation here -- while it looks completely wrong, it's
1043 // required for Python data providers to work correctly! Argh!
1044
1051
1052 // IMPORTANT -- do NOT remove the /TransferBack/ annotation here -- while it looks completely wrong, it's
1053 // required for Python data providers to work correctly! Argh!
1054
1055 protected:
1058
1059 QSet< QgsAbstractFeatureIterator * > mActiveIterators;
1060
1061 template<typename> friend class QgsAbstractFeatureIteratorFromSource;
1062};
1063
1064#endif // QGSFEATUREREQUEST_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:62
FeatureRequestFilterType
Types of feature request filters.
Definition qgis.h:2303
@ NoFilter
No filter is applied.
Definition qgis.h:2304
SpatialFilterType
Feature request spatial filter types.
Definition qgis.h:2332
QFlags< FeatureRequestFlag > FeatureRequestFlags
Flags for controlling feature requests.
Definition qgis.h:2292
InvalidGeometryCheck
Methods for handling of features with invalid geometries.
Definition qgis.h:2319
Internal feature iterator to be implemented within data providers.
Base class that can be used for any class that is capable of returning features.
friend class QgsAbstractFeatureIteratorFromSource
void iteratorOpened(QgsAbstractFeatureIterator *it)
void iteratorClosed(QgsAbstractFeatureIterator *it)
QSet< QgsAbstractFeatureIterator * > mActiveIterators
virtual QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest())=0
Gets an iterator for features matching the specified request.
Represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Handles coordinate transforms between two coordinate systems.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Handles parsing and evaluation of expressions (formerly called "search strings").
Wrapper for iterator of features from vector data provider or vector layer.
OrderByClause(const QString &expression, bool ascending=true)
Creates a new OrderByClause for a QgsFeatureRequest.
QString dump() const
Dumps the content to an SQL equivalent.
bool operator==(const OrderByClause &v) const
QgsExpression expression() const
The expression.
bool operator!=(const OrderByClause &v) const
bool ascending() const
Order ascending.
bool nullsFirst() const
Set if NULLS should be returned first.
void setAscending(bool ascending)
Set if ascending order is requested.
bool prepare(QgsExpressionContext *context)
Prepare the expression with the given context.
void setNullsFirst(bool nullsFirst)
Set if NULLS should be returned first.
Represents a list of OrderByClauses, with the most important first and the least important last.
QSet< int > CORE_EXPORT usedAttributeIndices(const QgsFields &fields) const
Returns a set of used, validated attribute indices.
QSet< QString > CORE_EXPORT usedAttributes() const
Returns a set of used attributes.
void CORE_EXPORT load(const QDomElement &elem)
Deserialize from XML.
QList< QgsFeatureRequest::OrderByClause > CORE_EXPORT list() const
Gets a copy as a list of OrderByClauses.
QString CORE_EXPORT dump() const
Dumps the content to an SQL equivalent syntax.
CORE_EXPORT OrderBy()
Create a new empty order by.
void CORE_EXPORT save(QDomElement &elem) const
Serialize to XML.
Wraps a request for features to a vector layer (or directly its vector data provider).
std::unique_ptr< QgsExpression > mFilterExpression
QgsCoordinateReferenceSystem mCrs
Qgis::InvalidGeometryCheck mInvalidGeometryFilter
Qgis::FeatureRequestFlags mFlags
QgsCoordinateTransformContext mTransformContext
QgsCoordinateTransform mTransform
QgsRectangle mFilterRect
Bounding box for spatial filtering.
Qgis::SpatialFilterType mSpatialFilter
Spatial filter type.
Qgis::FeatureRequestFilterType mFilter
Attribute/ID filter type.
long long limit() const
Returns the maximum number of features to request, or -1 if no limit set.
QgsExpressionContext * expressionContext()
Returns the expression context used to evaluate filter expressions.
std::function< void(const QgsFeature &) > transformErrorCallback() const
Returns the callback function to use when encountering a transform error when iterating features and ...
QgsFeatureIds mFilterFids
QgsGeometry mReferenceGeometry
Reference geometry for Qgis::RequestSpatialFilter::DistanceWithin filtering.
std::function< void(const QgsFeature &) > invalidGeometryCallback() const
Returns the callback function to use when encountering an invalid geometry and invalidGeometryCheck()...
Qgis::FeatureRequestFilterType filterType() const
Returns the attribute/ID filter type which is currently set on this request.
QgsGeometry referenceGeometry() const
Returns the reference geometry used for spatial filtering of features.
static const QString ALL_ATTRIBUTES
A special attribute that if set matches all attributes.
QgsExpressionContext mExpressionContext
Qgis::FeatureRequestFlags flags() const
Returns the flags which affect how features are fetched.
QgsSimplifyMethod mSimplifyMethod
QgsFeatureRequest & disableFilter()
Disables any attribute/ID filtering.
QgsExpression * filterExpression() const
Returns the filter expression (if set).
std::function< void(const QgsFeature &) > mTransformErrorCallback
QgsAttributeList mAttrs
std::shared_ptr< QgsGeometryEngine > mReferenceGeometryEngine
Prepared geometry engine for mReferenceGeometry.
const QgsSimplifyMethod & simplifyMethod() const
Returns the simplification method for geometries that will be fetched.
std::function< void(const QgsFeature &) > mInvalidGeometryCallback
std::shared_ptr< QgsGeometryEngine > referenceGeometryEngine() const
Returns the reference geometry engine used for spatial filtering of features.
Qgis::SpatialFilterType spatialFilterType() const
Returns the spatial filter type which is currently set on this request.
double distanceWithin() const
Returns the maximum distance from the referenceGeometry() of fetched features, if spatialFilterType()...
QgsAttributeList subsetOfAttributes() const
Returns the subset of attributes which at least need to be fetched.
QgsFeatureRequest & operator=(const QgsFeatureRequest &rh)
Qgis::InvalidGeometryCheck invalidGeometryCheck() const
Returns the invalid geometry checking behavior.
double mDistanceWithin
Maximum distance from reference geometry.
bool compare(const QgsFeatureRequest &other) const
Compare two requests for equality, ignoring Expression Context, Transform Error Callback,...
const QgsFeatureIds & filterFids() const
Returns the feature IDs that should be fetched.
QgsFeatureRequest()
construct a default request: for all features get attributes and geometries
QgsFeatureId filterFid() const
Returns the feature ID that should be fetched.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:60
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:44
Container of fields for a vector layer.
Definition qgsfields.h:46
A geometry engine is a low-level representation of a QgsAbstractGeometry object, optimised for use wi...
A geometry is the spatial representation of a feature.
A rectangle specified with double values.
Contains information about how to simplify geometries fetched from a QgsFeatureIterator.
#define SIP_DEPRECATED
Definition qgis_sip.h:113
#define SIP_SKIP
Definition qgis_sip.h:133
#define SIP_TRANSFERBACK
Definition qgis_sip.h:47
QSet< QgsFeatureId > QgsFeatureIds
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
QList< int > QgsAttributeList
Definition qgsfield.h:30