QGIS API Documentation  2.8.2-Wien
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 // forward declaration
20 namespace SpatialIndex
21 {
22  class IStorageManager;
23  class ISpatialIndex;
24  class Region;
25  class Point;
26 
27  namespace StorageManager
28  {
29  class IBuffer;
30  }
31 }
32 
33 class QgsFeature;
34 class QgsRectangle;
35 class QgsPoint;
36 
37 #include <QList>
38 #include <QSharedDataPointer>
39 
40 #include "qgsfeature.h"
41 
43 class QgsFeatureIterator;
44 
45 class CORE_EXPORT QgsSpatialIndex
46 {
47 
48  public:
49 
50  /* creation of spatial index */
51 
54 
60  explicit QgsSpatialIndex( const QgsFeatureIterator& fi );
61 
63  QgsSpatialIndex( const QgsSpatialIndex& other );
64 
66  ~QgsSpatialIndex();
67 
69  QgsSpatialIndex& operator=( const QgsSpatialIndex& other );
70 
71  /* operations */
72 
74  bool insertFeature( const QgsFeature& f );
75 
77  bool deleteFeature( const QgsFeature& f );
78 
79 
80  /* queries */
81 
83  QList<QgsFeatureId> intersects( QgsRectangle rect ) const;
84 
86  QList<QgsFeatureId> nearestNeighbor( QgsPoint point, int neighbors ) const;
87 
88  /* debugging */
89 
91  QAtomicInt refs() const;
92 
93  protected:
94  // @note not available in python bindings
95  static SpatialIndex::Region rectToRegion( QgsRectangle rect );
96  // @note not available in python bindings
97  static bool featureInfo( const QgsFeature& f, SpatialIndex::Region& r, QgsFeatureId &id );
98 
99  friend class QgsFeatureIteratorDataStream; // for access to featureInfo()
100 
101  private:
102 
103  QSharedDataPointer<QgsSpatialIndexData> d;
104 
105 };
106 
107 #endif
108