template struct nanoflann::KDTreeEigenMatrixAdaptor

An L2-metric KD-tree adaptor for working with data directly stored in an Eigen Matrix, without duplicating the data storage.

Each row in the matrix represents a point in the state space.

Example of usage:

Eigen::Matrix<num_t,Dynamic,Dynamic>  mat;
// Fill out "mat"...

typedef KDTreeEigenMatrixAdaptor< Eigen::Matrix<num_t,Dynamic,Dynamic> >  my_kd_tree_t;
const int max_leaf = 10;
my_kd_tree_t   mat_index(dimdim, mat, max_leaf );
mat_index.index->buildIndex();
mat_index.index->...

Parameters:

DIM

If set to >0, it specifies a compile-time fixed dimensionality for the points in the data set, allowing more compiler optimizations.

Distance

The distance metric to use: nanoflann::metric_L1, nanoflann::metric_L2, nanoflann::metric_L2_Simple, etc.

#include <nanoflann.hpp>

template <class MatrixType, int DIM = -1, class Distance = nanoflann::metric_L2>
struct KDTreeEigenMatrixAdaptor
{
    // typedefs

    typedef KDTreeEigenMatrixAdaptor<MatrixType, DIM, Distance> self_t;
    typedef MatrixType::Scalar num_t;
    typedef MatrixType::Index IndexType;
    typedef Distance::template traits<num_t, self_t>::distance_t metric_t;
    typedef KDTreeSingleIndexAdaptor<metric_t, self_t, DIM, IndexType> index_t;

    //
fields

    index_t* index;
    const MatrixType& m_data_matrix;

    // construction

    KDTreeEigenMatrixAdaptor(const int dimensionality, const MatrixType& mat, const int leaf_max_size = 10);

    //
methods

    const self_t& derived() const;
    self_t& derived();
    size_t kdtree_get_point_count() const;

    num_t kdtree_distance(
        const num_t* p1,
        const IndexType idx_p2,
        IndexType size
        ) const;

    num_t kdtree_get_pt(
        const IndexType idx,
        int dim
        ) const;

    template <class BBOX>
    bool kdtree_get_bbox(BBOX&) const;

    void query(
        const num_t* query_point,
        const size_t num_closest,
        IndexType* out_indices,
        num_t* out_distances_sq,
        const int = 10
        ) const;
};

Construction

KDTreeEigenMatrixAdaptor(
    const int dimensionality,
    const MatrixType& mat,
    const int leaf_max_size = 10
    )

The kd-tree index for the user to call its methods as usual with any other FLANN index.

Constructor: takes a const ref to the matrix object with the data points

Methods

void query(
    const num_t* query_point,
    const size_t num_closest,
    IndexType* out_indices,
    num_t* out_distances_sq,
    const int = 10
    ) const

Query for the num_closest closest points to a given point (entered as query_point[0:dim-1]).

Note that this is a short-cut method for index->findNeighbors(). The user can also call index->… methods as desired. nChecks_IGNORED is ignored but kept for compatibility with the original FLANN interface.