QGIS API Documentation  2.99.0-Master (7705179)
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 
55 class CORE_EXPORT QgsSpatialIndex
56 {
57 
58  public:
59 
60  /* creation of spatial index */
61 
64 
74  explicit QgsSpatialIndex( const QgsFeatureIterator &fi, QgsFeedback *feedback = nullptr );
75 
87  explicit QgsSpatialIndex( const QgsFeatureSource &source, QgsFeedback *feedback = nullptr );
88 
90  QgsSpatialIndex( const QgsSpatialIndex &other );
91 
93  ~QgsSpatialIndex();
94 
96  QgsSpatialIndex &operator=( const QgsSpatialIndex &other );
97 
98  /* operations */
99 
101  bool insertFeature( const QgsFeature &f );
102 
108  bool insertFeature( QgsFeatureId id, const QgsRectangle &bounds );
109 
111  bool deleteFeature( const QgsFeature &f );
112 
113 
114  /* queries */
115 
117  QList<QgsFeatureId> intersects( const QgsRectangle &rect ) const;
118 
120  QList<QgsFeatureId> nearestNeighbor( const QgsPointXY &point, int neighbors ) const;
121 
122  /* debugging */
123 
125  QAtomicInt SIP_PYALTERNATIVETYPE( int ) refs() const;
126 
127  private:
128 
129  static SpatialIndex::Region rectToRegion( const QgsRectangle &rect );
130 
138  static bool featureInfo( const QgsFeature &f, SpatialIndex::Region &r, QgsFeatureId &id ) SIP_SKIP;
139 
148  static bool featureInfo( const QgsFeature &f, QgsRectangle &rect, QgsFeatureId &id );
149 
150  friend class QgsFeatureIteratorDataStream; // for access to featureInfo()
151 
152  private:
153 
154  QSharedDataPointer<QgsSpatialIndexData> d;
155 
156 };
157 
158 #endif
159 
Wrapper for iterator of features from vector data provider or vector layer.
A rectangle specified with double values.
Definition: qgsrectangle.h:38
A class to represent a 2D point.
Definition: qgspointxy.h:42
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:61
Base class for feedback objects to be used for cancelation of something running in a worker thread...
Definition: qgsfeedback.h:43
#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