QGIS API Documentation 3.99.0-Master (21b3aa880ba)
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:
87
110 class CORE_EXPORT OrderByClause
111 {
112 public:
113
122 OrderByClause( const QString &expression, bool ascending = true );
123
131 OrderByClause( const QString &expression, bool ascending, bool nullsfirst );
132
141 OrderByClause( const QgsExpression &expression, bool ascending = true );
142
150 OrderByClause( const QgsExpression &expression, bool ascending, bool nullsfirst );
151
157
164 bool prepare( QgsExpressionContext *context );
165
170 bool ascending() const;
171
175 void setAscending( bool ascending );
176
181 bool nullsFirst() const;
182
186 void setNullsFirst( bool nullsFirst );
187
191 QString dump() const;
192
193 // friend inline int qHash(const OrderByClause &a) { return qHash(a.mExpression.expression()) ^ qHash(a.mAscending) ^ qHash( a.mNullsFirst); }
194
195 bool operator==( const OrderByClause &v ) const
196 {
197 return mExpression == v.mExpression &&
198 mAscending == v.mAscending &&
199 mNullsFirst == v.mNullsFirst;
200 }
201
202 bool operator!=( const OrderByClause &v ) const
203 {
204 return !( v == *this );
205 }
206
207 private:
208 QgsExpression mExpression;
209 bool mAscending;
210 bool mNullsFirst;
211 };
212
213
220 class OrderBy : public QList<QgsFeatureRequest::OrderByClause>
221 {
222 public:
223
227 CORE_EXPORT OrderBy();
228
232 CORE_EXPORT OrderBy( const QList<QgsFeatureRequest::OrderByClause> &other );
233
238 CORE_EXPORT bool operator==( const OrderBy &v ) const;
239
244 CORE_EXPORT bool operator!=( const OrderBy &v ) const;
245
252 QList<QgsFeatureRequest::OrderByClause> CORE_EXPORT list() const;
253
257 void CORE_EXPORT save( QDomElement &elem ) const;
258
262 void CORE_EXPORT load( const QDomElement &elem );
263
268 QSet<QString> CORE_EXPORT usedAttributes() const;
269
274 QSet<int> CORE_EXPORT usedAttributeIndices( const QgsFields &fields ) const;
275
279 QString CORE_EXPORT dump() const;
280 };
281
285 static const QString ALL_ATTRIBUTES;
286
290 explicit QgsFeatureRequest( QgsFeatureId fid );
292 explicit QgsFeatureRequest( const QgsFeatureIds &fids );
293
301 explicit QgsFeatureRequest( const QgsRectangle &rectangle );
302
304 explicit QgsFeatureRequest( const QgsExpression &expr, const QgsExpressionContext &context = QgsExpressionContext() );
309
316 bool compare( const QgsFeatureRequest &other ) const;
317
319
332
346
359 QgsFeatureRequest &setFilterRect( const QgsRectangle &rectangle );
360
376 QgsRectangle filterRect() const;
377
393 QgsFeatureRequest &setDistanceWithin( const QgsGeometry &geometry, double distance );
394
410
419 std::shared_ptr< QgsGeometryEngine > referenceGeometryEngine() const SIP_SKIP { return mReferenceGeometryEngine; }
420
432 double distanceWithin() const { return mDistanceWithin; }
433
442 QgsFeatureRequest &setFilterFid( QgsFeatureId fid );
443
451
460 QgsFeatureRequest &setFilterFids( const QgsFeatureIds &fids );
461
468 const QgsFeatureIds &filterFids() const { return mFilterFids; }
469
476 QgsFeatureRequest &setInvalidGeometryCheck( Qgis::InvalidGeometryCheck check );
477
483
490#ifndef SIP_RUN
491 QgsFeatureRequest &setInvalidGeometryCallback( const std::function< void( const QgsFeature & )> &callback );
492#else
493 QgsFeatureRequest &setInvalidGeometryCallback( SIP_PYCALLABLE / AllowNone / );
494 % MethodCode
495 Py_BEGIN_ALLOW_THREADS
496
497 sipCpp->setInvalidGeometryCallback( [a0]( const QgsFeature &arg )
498 {
499 SIP_BLOCK_THREADS
500 Py_XDECREF( sipCallMethod( NULL, a0, "D", &arg, sipType_QgsFeature, NULL ) );
501 SIP_UNBLOCK_THREADS
502 } );
503
504 sipRes = sipCpp;
505
506 Py_END_ALLOW_THREADS
507 % End
508#endif
509
516 std::function< void( const QgsFeature & ) > invalidGeometryCallback() const SIP_SKIP { return mInvalidGeometryCallback; }
517
527 QgsFeatureRequest &setFilterExpression( const QString &expression );
528
535
544 QgsFeatureRequest &combineFilterExpression( const QString &expression );
545
552
558 QgsFeatureRequest &setExpressionContext( const QgsExpressionContext &context );
559
571
581
582 QgsFeatureRequest &addOrderBy( const QString &expression, bool ascending = true );
583
592 QgsFeatureRequest &addOrderBy( const QString &expression, bool ascending, bool nullsfirst );
593
598 OrderBy orderBy() const;
599
604 QgsFeatureRequest &setOrderBy( const OrderBy &orderBy );
605
611 QgsFeatureRequest &setLimit( long long limit );
612
617#ifndef SIP_RUN
618 long long limit() const { return mLimit; }
619#else
620 long long limit() const;
621#endif
622
629
636
653 QgsFeatureRequest &setSubsetOfAttributes( const QgsAttributeList &attrs );
654
670 QgsFeatureRequest &setNoAttributes();
671
686
698 QgsFeatureRequest &setSubsetOfAttributes( const QStringList &attrNames, const QgsFields &fields );
699
711 QgsFeatureRequest &setSubsetOfAttributes( const QSet<QString> &attrNames, const QgsFields &fields );
712
718 QgsFeatureRequest &setSimplifyMethod( const QgsSimplifyMethod &simplifyMethod );
719
726
739 QgsCoordinateTransform coordinateTransform() const;
740
754 QgsCoordinateReferenceSystem destinationCrs() const;
755
762 QgsCoordinateTransformContext transformContext() const;
763
773 QgsCoordinateTransform calculateTransform( const QgsCoordinateReferenceSystem &sourceCrs ) const;
774
805 QgsFeatureRequest &setCoordinateTransform( const QgsCoordinateTransform &transform );
806
833 QgsFeatureRequest &setDestinationCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context );
834
842#ifndef SIP_RUN
843 QgsFeatureRequest &setTransformErrorCallback( const std::function< void( const QgsFeature & )> &callback );
844#else
845 QgsFeatureRequest &setTransformErrorCallback( SIP_PYCALLABLE / AllowNone / );
846 % MethodCode
847 Py_BEGIN_ALLOW_THREADS
848
849 sipCpp->setTransformErrorCallback( [a0]( const QgsFeature &arg )
850 {
851 SIP_BLOCK_THREADS
852 Py_XDECREF( sipCallMethod( NULL, a0, "D", &arg, sipType_QgsFeature, NULL ) );
853 SIP_UNBLOCK_THREADS
854 } );
855
856 sipRes = sipCpp;
857
858 Py_END_ALLOW_THREADS
859 % End
860#endif
861
869 std::function< void( const QgsFeature & ) > transformErrorCallback() const SIP_SKIP { return mTransformErrorCallback; }
870
871
880 bool acceptFeature( const QgsFeature &feature );
881
890 Q_DECL_DEPRECATED int connectionTimeout() const SIP_DEPRECATED;
891
900 Q_DECL_DEPRECATED QgsFeatureRequest &setConnectionTimeout( int connectionTimeout ) SIP_DEPRECATED;
901
911 int timeout() const;
912
922 QgsFeatureRequest &setTimeout( int timeout );
923
937 bool requestMayBeNested() const;
938
952 QgsFeatureRequest &setRequestMayBeNested( bool requestMayBeNested );
953
965 void setFeedback( QgsFeedback *feedback );
966
975 QgsFeedback *feedback() const;
976
977 protected:
978
982 Qgis::FeatureRequestFilterType mFilter = Qgis::FeatureRequestFilterType::NoFilter;
983
989 Qgis::SpatialFilterType mSpatialFilter = Qgis::SpatialFilterType::NoFilter;
990
995
1000
1005
1010
1015 Qgis::FeatureRequestFlags mFlags;
1018 long long mLimit = -1;
1020 Qgis::InvalidGeometryCheck mInvalidGeometryFilter = Qgis::InvalidGeometryCheck::NoCheck;
1021 std::function< void( const QgsFeature & ) > mInvalidGeometryCallback;
1022 std::function< void( const QgsFeature & ) > mTransformErrorCallback;
1026 int mTimeout = -1;
1029};
1030
1031
1032class QgsFeatureIterator;
1034
1040{
1041 public:
1042 virtual ~QgsAbstractFeatureSource();
1043
1044
1045 // IMPORTANT -- do NOT remove the /TransferBack/ annotation here -- while it looks completely wrong, it's
1046 // required for Python data providers to work correctly! Argh!
1047
1054
1055 // IMPORTANT -- do NOT remove the /TransferBack/ annotation here -- while it looks completely wrong, it's
1056 // required for Python data providers to work correctly! Argh!
1057
1058 protected:
1061
1062 QSet< QgsAbstractFeatureIterator * > mActiveIterators;
1063
1064 template<typename> friend class QgsAbstractFeatureIteratorFromSource;
1065};
1066
1067#endif // QGSFEATUREREQUEST_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:56
FeatureRequestFilterType
Types of feature request filters.
Definition qgis.h:2222
@ NoFilter
No filter is applied.
Definition qgis.h:2223
SpatialFilterType
Feature request spatial filter types.
Definition qgis.h:2251
QFlags< FeatureRequestFlag > FeatureRequestFlags
Flags for controlling feature requests.
Definition qgis.h:2211
InvalidGeometryCheck
Methods for handling of features with invalid geometries.
Definition qgis.h:2238
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:58
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:114
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_TRANSFERBACK
Definition qgis_sip.h:48
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:28