QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsspatialindex.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsspatialindex.h - wrapper class for spatial index library
3 ----------------------
4 begin : December 2006
5 copyright : (C) 2006 by Martin Dobias
6 email : wonder.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
16#ifndef QGSSPATIALINDEX_H
17#define QGSSPATIALINDEX_H
18
19
20#include "qgis_sip.h"
21
22// forward declaration
23namespace SpatialIndex SIP_SKIP
24{
25 class IStorageManager;
26 class ISpatialIndex;
27 class Region;
28 class Point;
29
30 namespace StorageManager
31 {
32 class IBuffer;
33 }
34}
35
36class QgsFeedback;
37class QgsFeature;
38class QgsRectangle;
39class QgsPointXY;
40
41#include "qgis_core.h"
42#include "qgsfeaturesink.h"
43#include <QList>
44#include <QSharedDataPointer>
45
46#include "qgsfeature.h"
47
48class QgsSpatialIndexData;
51
67class CORE_EXPORT QgsSpatialIndex : public QgsFeatureSink
68{
69
70 public:
71
72 /* creation of spatial index */
73
75 enum Flag SIP_ENUM_BASETYPE( IntFlag )
76 {
77 FlagStoreFeatureGeometries = 1 << 0,
78 };
79 Q_DECLARE_FLAGS( Flags, Flag )
80
81
85
95 explicit QgsSpatialIndex( const QgsFeatureIterator &fi, QgsFeedback *feedback = nullptr, QgsSpatialIndex::Flags flags = QgsSpatialIndex::Flags() );
96
97#ifndef SIP_RUN
98
110 explicit QgsSpatialIndex( const QgsFeatureIterator &fi, const std::function< bool( const QgsFeature & ) > &callback, QgsSpatialIndex::Flags flags = QgsSpatialIndex::Flags() );
111#endif
112
123 explicit QgsSpatialIndex( const QgsFeatureSource &source, QgsFeedback *feedback = nullptr, QgsSpatialIndex::Flags flags = QgsSpatialIndex::Flags() );
124
126 QgsSpatialIndex( const QgsSpatialIndex &other );
127
129 ~QgsSpatialIndex() override;
130
132 QgsSpatialIndex &operator=( const QgsSpatialIndex &other );
133
134 /* operations */
135
140 Q_DECL_DEPRECATED bool insertFeature( const QgsFeature &feature ) SIP_DEPRECATED;
141
149 bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
150
158 bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
159
165 Q_DECL_DEPRECATED bool insertFeature( QgsFeatureId id, const QgsRectangle &bounds ) SIP_DEPRECATED;
166
172 bool addFeature( QgsFeatureId id, const QgsRectangle &bounds );
173
177 bool deleteFeature( const QgsFeature &feature );
178
184 bool deleteFeature( QgsFeatureId id, const QgsRectangle &bounds );
185
186 /* queries */
187
195 QList<QgsFeatureId> intersects( const QgsRectangle &rectangle ) const;
196
213 QList<QgsFeatureId> nearestNeighbor( const QgsPointXY &point, int neighbors = 1, double maxDistance = 0 ) const;
214
233 QList<QgsFeatureId> nearestNeighbor( const QgsGeometry &geometry, int neighbors = 1, double maxDistance = 0 ) const;
234
235#ifndef SIP_RUN
236
244 QgsGeometry geometry( QgsFeatureId id ) const;
245
246#else
247
257 SIP_PYOBJECT geometry( QgsFeatureId id ) const SIP_TYPEHINT( QgsGeometry );
258 % MethodCode
259 std::unique_ptr< QgsGeometry > g = std::make_unique< QgsGeometry >( sipCpp->geometry( a0 ) );
260 if ( g->isNull() )
261 {
262 PyErr_SetString( PyExc_KeyError, QStringLiteral( "No geometry with feature id %1 exists in the index." ).arg( a0 ).toUtf8().constData() );
263 sipIsErr = 1;
264 }
265 else
266 {
267 sipRes = sipConvertFromType( g.release(), sipType_QgsGeometry, Py_None );
268 }
269 % End
270#endif
271
272 /* debugging */
273
275 QAtomicInt SIP_PYALTERNATIVETYPE( int ) refs() const;
276
277 private:
278
287 static bool featureInfo( const QgsFeature &f, SpatialIndex::Region &r, QgsFeatureId &id ) SIP_SKIP;
288
297 static bool featureInfo( const QgsFeature &f, QgsRectangle &rect, QgsFeatureId &id );
298
299 friend class QgsFeatureIteratorDataStream; // for access to featureInfo()
300
301 private:
302
303 QSharedDataPointer<QgsSpatialIndexData> d;
304
305};
306
308
309#endif //QGSSPATIALINDEX_H
Wrapper for iterator of features from vector data provider or vector layer.
An interface for objects which accept features via addFeature(s) methods.
virtual bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags())
Adds a single feature to the sink.
Flag
Flags controlling how features are added to a sink.
virtual bool addFeatures(QgsFeatureList &features, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags())=0
Adds a list of features to the sink.
QFlags< Flag > Flags
An interface for objects which provide features via a getFeatures method.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition: qgsfeedback.h:44
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:162
A class to represent a 2D point.
Definition: qgspointxy.h:60
A rectangle specified with double values.
Definition: qgsrectangle.h:42
A spatial index for QgsFeature objects.
QFlags< Flag > Flags
QgsSpatialIndex(const QgsFeatureIterator &fi, const std::function< bool(const QgsFeature &) > &callback, QgsSpatialIndex::Flags flags=QgsSpatialIndex::Flags())
Constructor - creates R-tree and bulk loads it with features from the iterator.
#define SIP_TYPEHINT(type)
Definition: qgis_sip.h:232
#define SIP_PYALTERNATIVETYPE(type)
Definition: qgis_sip.h:141
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_ENUM_BASETYPE(type)
Definition: qgis_sip.h:278
#define SIP_SKIP
Definition: qgis_sip.h:126
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:917
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Definition: qgsfeatureid.h:28
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)