Loading [MathJax]/extensions/tex2jax.js
IPolylineIndex.hpp
1 #pragma once
2 
3 #include "DM/config.hpp"
4 #include "DM/Handle.hpp"
5 #include "DM/Iterator.hpp"
6 #include "DM/IGeometry.hpp"
7 #include "DM/IIndexStats.hpp"
8 #include "DM/IBox.hpp"
9 #include "DM/SpatialQueryMode.hpp"
10 
11 DM_NAMESPACE_BEGIN
12 
13 /// \brief Interface to an polyline and polygon index object managing all non point objects within the datamanager
14 class DM_API IPolylineIndex : public ObjectBase
15 {
16  public:
17  /// create a new r tree object
18  static IPolylineIndex* New(int dimension, bool threadsafe);
19 
20  // Iterator typedefs ============================================================================
21  typedef ConstIterator<IGeometry> const_iterator_geometry; ///< Geometry iterator
22  typedef ConstIterator<IPolyline> const_iterator_line; ///< Polyline iterator
23 
24  typedef InsertIterator<IGeometry> insert_iterator_geometry; ///< Geometry insert iterator (used in searchGeometry functions)
25  typedef InsertIterator<IPolyline> insert_iterator_line; ///< Polyline insert iterator (used in searchPolyline functions)
26 
27 protected:
28  virtual ~IPolylineIndex() {}
29 
30 public:
31  // General memeber functions ====================================================================
32  virtual BoxHandle getLimit() const = 0;
33 
34  virtual int64_t sizeGeometry() const = 0;
35 
36  virtual int64_t sizePolyline() const = 0;
37  virtual int64_t sizePolylinePoint() const = 0;
38 
39  virtual int64_t sizePolygon() const = 0;
40  virtual int64_t sizePolygonPoint() const = 0;
41 
42  // access functions ============================================================================
43  virtual PolylineHandle getPolyline(int64_t id) const = 0;
44  virtual PolygonHandle getPolygon(int64_t id) const = 0;
45  virtual GeometryHandle getGeometry(int64_t id) const = 0;
46 
47  // modifier functions ==========================================================================
48  virtual int64_t addPolyline(PolylineHandle l) = 0;
49  virtual int64_t addPolygon(PolygonHandle p) = 0;
50 
51  virtual void replacePolyline(PolylineHandle l) = 0;
52  virtual void replacePolygon(PolygonHandle p) = 0;
53 
54  /// remove an element by its id
55  virtual void remove(int64_t id) = 0;
56 
57  // Iterator function ============================================================================
58  virtual const_iterator_geometry beginGeometry(IteratorOrder order = IteratorOrder::internal) const = 0;
59  virtual const_iterator_geometry endGeometry(IteratorOrder order = IteratorOrder::internal) const = 0;
60 
61  virtual const_iterator_line beginPolyline(IteratorOrder order = IteratorOrder::internal) const = 0;
62  virtual const_iterator_line endPolyline(IteratorOrder order = IteratorOrder::internal) const = 0;
63 
64  // Spatial access functions =====================================================================
65  virtual void searchGeometry(const IWindow &win, SpatialQueryMode mode, insert_iterator_geometry &instIt, bool includeRightBoundary = true) = 0;
66  virtual void searchGeometry(const IBox &box, SpatialQueryMode mode, insert_iterator_geometry &instIt, bool includeRightBoundary = true) = 0;
67  virtual void searchGeometry(const IPolygon &p, SpatialQueryMode mode, insert_iterator_geometry &instIt) = 0;
68 
69  /// \brief k nearest neighbour search
70  /// \param[in] nnCount number of k neighbour to find
71  /// \param[in] queryPt base point for the neighbour search
72  /// \param[in] instIt insert iterator for collecting the found geometry objects
73  /// \param[in] maxDistance maximum distance (not squared distance) for finding geometry objects (use -1 disabling the distance limit)
74  /// \return distance to the furthest found geometry object or 'maxDistance' in case on object was found
75  virtual double searchGeometry(int nnCount, const IPoint &queryPt, insert_iterator_geometry &instIt,
76  double maxDistance = -1) = 0;
77 
78  // Statistics memeber functions ====================================================================
79  virtual IndexStatsHandle getIndexStatistics() const = 0;
80 };
81 
82 typedef Handle< IPolylineIndex > PolylineIndexHandle;
83 
84 DM_NAMESPACE_END
Definition: Iterator.hpp:96
2d window object
Definition: IWindow.hpp:11
ConstIterator< IGeometry > const_iterator_geometry
Geometry iterator.
Definition: IPolylineIndex.hpp:21
Interface to an polyline and polygon index object managing all non point objects within the datamanag...
Definition: IPolylineIndex.hpp:14
InsertIterator< IGeometry > insert_iterator_geometry
Geometry insert iterator (used in searchGeometry functions)
Definition: IPolylineIndex.hpp:24
Geometry object describing a 3d box.
Definition: IBox.hpp:11
InsertIterator< IPolyline > insert_iterator_line
Polyline insert iterator (used in searchPolyline functions)
Definition: IPolylineIndex.hpp:25
ConstIterator< IPolyline > const_iterator_line
Polyline iterator.
Definition: IPolylineIndex.hpp:22
interface to a 2.5d polygon of arbitrary complexity
Definition: IPolygon.hpp:33
IteratorOrder
Definition: Iterator.hpp:9
SpatialQueryMode
Definition: SpatialQueryMode.hpp:7
Definition: Iterator.hpp:183
Smart pointer class using reference counting with support for DM objects (see ObjectBase)
Definition: Handle.hpp:75
Definition: M/c++_api/inc/DM/ObjectBase.hpp:8
3d point object
Definition: IPoint.hpp:14