atlas
Classes | Public Types | Public Member Functions | List of all members
atlas::util::detail::KDTreeBase< PayloadT, PointT > Class Template Referenceabstract
Inheritance diagram for atlas::util::detail::KDTreeBase< PayloadT, PointT >:
Inheritance graph
[legend]
Collaboration diagram for atlas::util::detail::KDTreeBase< PayloadT, PointT >:
Collaboration graph
[legend]

Classes

struct  KDTreeTraits
 
struct  Value
 
class  ValueList
 

Public Types

using Payload = PayloadT
 
using Point = PointT
 
using PayloadList = std::vector< Payload >
 

Public Member Functions

 KDTreeBase (const Geometry &geometry)
 
const Geometrygeometry () const
 
bool empty () const
 
virtual idx_t size () const =0
 
virtual size_t footprint () const =0
 
virtual void reserve (idx_t)
 Reserve memory for building the kdtree in one shot (optional, at cost of extra memory) Implementation depends in derived classes.
 
template<typename Point >
void insert (const Point &p, const Payload &payload)
 Insert spherical point (lon,lat) or 3D cartesian point (x,y,z) If memory has been reserved with reserve(), insertion will be delayed until build() is called. More...
 
virtual void insert (const Value &)=0
 Insert Value If memory has been reserved with reserve(), insertion will be delayed until build() is called. More...
 
virtual void build ()
 Build the kd-tree in one shot, if memory has been reserved, depending on derived class implementation This will need to be called before all search functions like closestPoints(). More...
 
virtual void build (std::vector< Value > &values)=0
 Build the kd-tree in one shot.
 
template<typename Longitudes , typename Latitudes , typename Payloads >
void build (const Longitudes &longitudes, const Latitudes &latitudes, const Payloads &payloads)
 Build with spherical points (lon,lat) where longitudes, latitudes, and payloads are separate containers. More...
 
template<typename LongitudesIterator , typename LatitudesIterator , typename PayloadsIterator >
void build (const LongitudesIterator &longitudes_begin, const LongitudesIterator &longitudes_end, const LatitudesIterator &latitudes_begin, const LatitudesIterator &latitudes_end, const PayloadsIterator &payloads_begin, const PayloadsIterator &payloads_end)
 Build with spherical points (lon,lat) given separate iterator ranges for longitudes, latitudes, and payloads. More...
 
template<typename Points , typename Payloads >
void build (const Points &points, const Payloads &payloads)
 Build with spherical points (lon,lat) where longitudes, latitudes, and payloads are separate containers. More...
 
template<typename PointIterator , typename PayloadsIterator >
void build (const PointIterator &points_begin, const PointIterator &points_end, const PayloadsIterator &payloads_begin, const PayloadsIterator &payloads_end)
 Build with spherical points (lon,lat) given separate iterator ranges for longitudes, latitudes, and payloads. More...
 
template<typename Point >
ValueList closestPoints (const Point &p, size_t k) const
 Find k nearest neighbours given a 3D cartesian point (x,y,z) or 2D lonlat point(lon,lat)
 
template<typename Point >
Value closestPoint (const Point &p) const
 Find nearest neighbour given a 3D cartesian point (x,y,z)
 
template<typename Point >
ValueList closestPointsWithinRadius (const Point &p, double radius) const
 Find all points within a distance of given radius from a given point (x,y,z)
 

Member Function Documentation

◆ build() [1/5]

template<typename PayloadT , typename PointT = Point3>
virtual void atlas::util::detail::KDTreeBase< PayloadT, PointT >::build ( )
inlinevirtual

Build the kd-tree in one shot, if memory has been reserved, depending on derived class implementation This will need to be called before all search functions like closestPoints().

Reimplemented in atlas::util::detail::KDTree_eckit< TreeT, PayloadT, PointT >.

◆ build() [2/5]

template<typename PayloadT , typename PointT = Point3>
template<typename Longitudes , typename Latitudes , typename Payloads >
void atlas::util::detail::KDTreeBase< PayloadT, PointT >::build ( const Longitudes &  longitudes,
const Latitudes &  latitudes,
const Payloads &  payloads 
)
inline

Build with spherical points (lon,lat) where longitudes, latitudes, and payloads are separate containers.

Memory will be reserved with reserve() to match the size

◆ build() [3/5]

template<typename PayloadT , typename PointT = Point3>
template<typename LongitudesIterator , typename LatitudesIterator , typename PayloadsIterator >
void atlas::util::detail::KDTreeBase< PayloadT, PointT >::build ( const LongitudesIterator &  longitudes_begin,
const LongitudesIterator &  longitudes_end,
const LatitudesIterator &  latitudes_begin,
const LatitudesIterator &  latitudes_end,
const PayloadsIterator &  payloads_begin,
const PayloadsIterator &  payloads_end 
)
inline

Build with spherical points (lon,lat) given separate iterator ranges for longitudes, latitudes, and payloads.

Memory will be reserved with reserve() to match the size

◆ build() [4/5]

template<typename PayloadT , typename PointT = Point3>
template<typename Points , typename Payloads >
void atlas::util::detail::KDTreeBase< PayloadT, PointT >::build ( const Points &  points,
const Payloads &  payloads 
)
inline

Build with spherical points (lon,lat) where longitudes, latitudes, and payloads are separate containers.

Memory will be reserved with reserve() to match the size

◆ build() [5/5]

template<typename PayloadT , typename PointT = Point3>
template<typename PointIterator , typename PayloadsIterator >
void atlas::util::detail::KDTreeBase< PayloadT, PointT >::build ( const PointIterator &  points_begin,
const PointIterator &  points_end,
const PayloadsIterator &  payloads_begin,
const PayloadsIterator &  payloads_end 
)
inline

Build with spherical points (lon,lat) given separate iterator ranges for longitudes, latitudes, and payloads.

Memory will be reserved with reserve() to match the size

◆ insert() [1/2]

template<typename PayloadT , typename PointT = Point3>
template<typename Point >
void atlas::util::detail::KDTreeBase< PayloadT, PointT >::insert ( const Point &  p,
const Payload &  payload 
)
inline

Insert spherical point (lon,lat) or 3D cartesian point (x,y,z) If memory has been reserved with reserve(), insertion will be delayed until build() is called.

◆ insert() [2/2]

template<typename PayloadT , typename PointT = Point3>
virtual void atlas::util::detail::KDTreeBase< PayloadT, PointT >::insert ( const Value )
pure virtual

Insert Value If memory has been reserved with reserve(), insertion will be delayed until build() is called.


The documentation for this class was generated from the following file: