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  // Iterator typedefs ============================================================================
18  typedef ConstIterator<IGeometry> const_iterator_geometry; ///< Geometry iterator
19  typedef ConstIterator<IPolyline> const_iterator_line; ///< Polyline iterator
20 
21  typedef InsertIterator<IGeometry> insert_iterator_geometry; ///< Geometry insert iterator (used in searchGeometry functions)
22  typedef InsertIterator<IPolyline> insert_iterator_line; ///< Polyline insert iterator (used in searchPolyline functions)
23 
24  virtual ~IPolylineIndex() {}
25 
26  // General memeber functions ====================================================================
27  virtual BoxHandle getLimit() const = 0;
28 
29  virtual int64_t sizeGeometry() const = 0;
30 
31  virtual int64_t sizePolyline() const = 0;
32  virtual int64_t sizePolylinePoint() const = 0;
33 
34  virtual int64_t sizePolygon() const = 0;
35  virtual int64_t sizePolygonPoint() const = 0;
36 
37  // access functions ============================================================================
38  virtual PolylineHandle getPolyline(int64_t id) const = 0;
39  virtual PolygonHandle getPolygon(int64_t id) const = 0;
40  virtual GeometryHandle getGeometry(int64_t id) const = 0;
41 
42  // modifier functions ==========================================================================
43  virtual int64_t addPolyline(PolylineHandle l) = 0;
44 
45  virtual void replacePolyline(PolylineHandle l) = 0;
46 
47  /// remove an element by its id
48  virtual void remove(int64_t id) = 0;
49 
50  // Iterator function ============================================================================
51  virtual const_iterator_geometry beginGeometry(IteratorOrder order = IteratorOrder::internal) const = 0;
52  virtual const_iterator_geometry endGeometry(IteratorOrder order = IteratorOrder::internal) const = 0;
53 
54  virtual const_iterator_line beginPolyline(IteratorOrder order = IteratorOrder::internal) const = 0;
55  virtual const_iterator_line endPolyline(IteratorOrder order = IteratorOrder::internal) const = 0;
56 
57  // Spatial access functions =====================================================================
58  virtual void searchGeometry(const IWindow &win, SpatialQueryMode mode, insert_iterator_geometry &instIt, bool includeRightBoundary = true) = 0;
59  virtual void searchGeometry(const IBox &box, SpatialQueryMode mode, insert_iterator_geometry &instIt, bool includeRightBoundary = true) = 0;
60  virtual void searchGeometry(const IPolygon &p, SpatialQueryMode mode, insert_iterator_geometry &instIt) = 0;
61 
62  /// \brief k nearest neighbour search
63  /// \param[in] nnCount number of k neighbour to find
64  /// \param[in] queryPt base point for the neighbour search
65  /// \param[in] instIt insert iterator for collecting the found geometry objects
66  /// \param[in] maxDistance maximum distance (not squared distance) for finding geometry objects (use -1 disabling the distance limit)
67  /// \return distance to the furthest found geometry object or 'maxDistance' in case on object was found
68  virtual double searchGeometry(int nnCount, const IPoint &queryPt, insert_iterator_geometry &instIt,
69  double maxDistance = -1) = 0;
70 
71  // Statistics memeber functions ====================================================================
72  virtual IndexStatsHandle getIndexStatistics() const = 0;
73 };
74 
75 typedef Handle< IPolylineIndex > PolylineIndexHandle;
76 
77 DM_NAMESPACE_END
Definition: Iterator.hpp:96
2d window object
Definition: IWindow.hpp:11
ConstIterator< IGeometry > const_iterator_geometry
Geometry iterator.
Definition: IPolylineIndex.hpp:18
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:21
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:22
ConstIterator< IPolyline > const_iterator_line
Polyline iterator.
Definition: IPolylineIndex.hpp:19
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