QGIS API Documentation  2.99.0-Master (5d67572)
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
23 namespace 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 
36 class QgsFeedback;
37 class QgsFeature;
38 class QgsRectangle;
39 class QgsPointXY;
40 
41 #include "qgis_core.h"
42 #include "qgis_sip.h"
43 #include <QList>
44 #include <QSharedDataPointer>
45 
46 #include "qgsfeature.h"
47 
49 class QgsFeatureIterator;
50 class QgsFeatureSource;
51 
56 class CORE_EXPORT QgsSpatialIndex
57 {
58 
59  public:
60 
61  /* creation of spatial index */
62 
65 
76  explicit QgsSpatialIndex( const QgsFeatureIterator &fi, QgsFeedback *feedback = nullptr );
77 
89  explicit QgsSpatialIndex( const QgsFeatureSource &source, QgsFeedback *feedback = nullptr );
90 
92  QgsSpatialIndex( const QgsSpatialIndex &other );
93 
95  ~QgsSpatialIndex();
96 
98  QgsSpatialIndex &operator=( const QgsSpatialIndex &other );
99 
100  /* operations */
101 
103  bool insertFeature( const QgsFeature &f );
104 
110  bool insertFeature( QgsFeatureId id, const QgsRectangle &bounds );
111 
113  bool deleteFeature( const QgsFeature &f );
114 
115 
116  /* queries */
117 
119  QList<QgsFeatureId> intersects( const QgsRectangle &rect ) const;
120 
122  QList<QgsFeatureId> nearestNeighbor( const QgsPointXY &point, int neighbors ) const;
123 
124  /* debugging */
125 
127  QAtomicInt SIP_PYALTERNATIVETYPE( int ) refs() const;
128 
129  private:
130 
131  static SpatialIndex::Region rectToRegion( const QgsRectangle &rect );
132 
141  static bool featureInfo( const QgsFeature &f, SpatialIndex::Region &r, QgsFeatureId &id ) SIP_SKIP;
142 
152  static bool featureInfo( const QgsFeature &f, QgsRectangle &rect, QgsFeatureId &id );
153 
154  friend class QgsFeatureIteratorDataStream; // for access to featureInfo()
155 
156  private:
157 
158  QSharedDataPointer<QgsSpatialIndexData> d;
159 
160 };
161 
162 #endif
163 
Wrapper for iterator of features from vector data provider or vector layer.
A rectangle specified with double values.
Definition: qgsrectangle.h:39
A class to represent a 2D point.
Definition: qgspointxy.h:43
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:62
Base class for feedback objects to be used for cancelation of something running in a worker thread...
Definition: qgsfeedback.h:44
#define SIP_SKIP
Definition: qgis_sip.h:119
Data of spatial index that may be implicitly shared.
Utility class for bulk loading of R-trees.
An interface for objects which provide features via a getFeatures method.
qint64 QgsFeatureId
Definition: qgsfeature.h:37
#define SIP_PYALTERNATIVETYPE(type)
Definition: qgis_sip.h:129