IPointIndex.hpp
22 // Iterator typedefs ============================================================================
24 typedef InsertIterator<IPoint> insert_iterator_point; ///< Point insert iterator (used in searchPoint functions)
28 typedef InsertIterator<IPointIndexLeaf> insert_iterator_leaf; ///< Leaf insert iterator (used in searchPoint functions)
32 // General memeber functions ====================================================================
34 virtual BoxHandle getIndexLimit() const = 0; ///< get index based bounding box (if no index bounding available the points based bounding box is returned)
42 // Iterator function ============================================================================
51 virtual const_iterator_leaf beginLeaf(FilterHandle filter, WindowHandle limits = WindowHandle()) const = 0;
52 virtual const_iterator_leaf endLeaf(FilterHandle filter, WindowHandle limits = WindowHandle()) const = 0;
58 virtual PointHandle getPoint(int64_t id) const = 0; ///< get point by id (if the id doesn't exist an empty handle is returned)
60 // Spatial access functions =====================================================================
61 virtual void searchPoint(const IWindow &win, insert_iterator_point &insIt, bool includeRightBoundary = true) = 0;
62 virtual void searchPoint(const IBox &box, insert_iterator_point &insIt, bool includeRightBoundary = true) = 0;
68 virtual void searchPoint(const IWindow &win, insert_iterator_point &insIt, insert_iterator_leaf &insLeaf, bool includeRightBoundary = true) = 0;
69 virtual void searchPoint(const IBox &box, insert_iterator_point &insIt, insert_iterator_leaf &insLeaf, bool includeRightBoundary = true) = 0;
70 virtual void searchPoint(const IPolygon &p, insert_iterator_point &insIt, insert_iterator_leaf &insLeaf) = 0;
71 virtual void searchPoint(const ICircle &c, insert_iterator_point &instIt, insert_iterator_leaf &insLeaf) = 0;
72 virtual void searchPoint(const ISphere &s, insert_iterator_point &instIt, insert_iterator_leaf &insLeaf) = 0;
73 virtual void searchPoint(const ICylinder &c, insert_iterator_point &instIt, insert_iterator_leaf &insLeaf) = 0;
76 /// potentially slow for the overall point index object. consider building a local kd tree -> IPointIndexLeaf
81 /// \param[in] maxDistance maximum distance (not squared distance) for finding geometry objects (use -1 disabling the distance limit)
82 /// \return distance to the furthest found geometry object or 'maxDistance' in case on object was found
86 /// potentially slow for the overall point index object. consider building a local kd tree -> IPointIndexLeaf
91 /// \param[in] insLeaf leaf inster iterator for storing all leafs for which nearest neighbour points where returned
92 /// \param[in] maxDistance maximum distance (not squared distance) for finding geometry objects (use -1 disabling the distance limit)
93 /// \return distance to the furthest found geometry object or 'maxDistance' in case on object was found
94 virtual double searchPoint(int nnCount, const IPoint &queryPt, insert_iterator_point &instIt, insert_iterator_leaf &insLeaf,
101 // efficiency function. access leaf properties without loading point data into memory ===========
108 virtual AddInfoStatisticsHandle getLeafAddInfoStatistics(const const_iterator_leaf &it) const = 0;
111 // get all leafs within window ==================================================================
112 virtual void searchLeaf(const IWindow &win, insert_iterator_leaf &insLeaf, bool includeRightBoundary = true) = 0;
